OK, så der er flere ting, du skal ændre for at få det til at fungere:
-
Tilføj parameterløs konstruktør til Note, da det vil være nødvendigt for deserialisering:
public Note() { }
-
Slip for "statisk" i Notes felter:
offentlig
statiskstreng Client { get; sæt; }offentlig
statiskint Case { få; sæt; }offentlig
statiskstreng Tekst { get; sæt; }offentlig
statiskint NoteId { get; sæt; }offentlig
statiskstreng R1 { get; sæt; }offentlig
statiskstreng R2 { get; sæt; }offentlig
statiskstreng S1 { få; sæt; }offentlig
statiskDatoTid Dato { get; sæt; }offentlig
statiskbool Type { get; sæt; } -
Send ikke JSON-array, hvis du kun vil have 1 objekt, det vil ikke deserialiseres. Du forventer enkelt objekt, ikke array, så send ikke array.
-
Du har Type som bool, men du sender streng "1", dette vil ikke deserialiseres til sand værdi, som du måske forventede. Send enten sand/falsk (ikke "sand"/"falsk") eller skift type Type til streng.
-
Slip af med det private varefelt, du behøver det ikke:
privat noteelement; -
Slip af med de konstruktører, du har der
offentlig note(streng json)offentlig note(notat)Ikke kun at de ikke giver mening og ikke virker, du behøver dem ikke, da JSON-deserializer vil udfylde felterne for dig.
EDIT: For eksempel siger du, at det ikke bygger, fordi der ikke længere er en konstruktør med én parameter. Selvfølgelig bygger det ikke, der er denne linje
Note notesdata = new Note(item);
men du behøver ikke den linje. Hvad er ideen bag denne linje? Du vil have en forekomst af Note-klassen, men du har den allerede i "item"-variabel. Du behøver ikke at oprette en anden kopi af det. Så slip også med dette.
En anden grund til, hvorfor det ikke vil kompilere, er, at du slipper af med de statiske felter, mens du stadig har dette i din Tilføj-metode:
cmd.Parameters.Add("@Text", SqlDbType.VarChar).Value = Note.Text.Trim();
cmd.Parameters.Add("@When", SqlDbType.DateTime).Value = Note.Date;
og det er jeg helt sikker på, at du ikke ønsker. I stedet vil du bruge forekomsten af objektet, der blev sendt til dig:
cmd.Parameters.Add("@Text", SqlDbType.VarChar).Value = item.Text.Trim();
cmd.Parameters.Add("@When", SqlDbType.DateTime).Value = item.Date;
En anden ting er, at der normalt ikke er nogen grund til, hvorfor Add-metoden skulle returnere det objekt, der tilføjes til DB. Så du er velkommen til at ændre dette
public Note Add(Note item)
til dette
public void Add(Note item)
og returner ikke noget, du behøver det ikke.
Jeg er ikke ekspert i SqlConnection og ting omkring det, så den del kommenterer jeg ikke. Jeg bruger EF i mine projekter til at arbejde med DB. Så der kan være nogle problemer i den del, men det kan jeg ikke udtale mig om.