OK, er zijn dus verschillende dingen die je moet veranderen om het te laten werken:
-
Voeg parameterloze constructor toe aan Note omdat deze nodig is voor deserialisatie:
public Note() { }
-
Weg met "statisch" in de velden van Note:
openbaar
statischstring Client { get; set; }openbaar
statischint Geval { krijgen; set; }openbaar
statischstring Tekst { get; set; }openbaar
statischint NoteId {get; set; }openbaar
statischtekenreeks R1 { halen; set; }openbaar
statischtekenreeks R2 { halen; set; }openbaar
statischtekenreeks S1 { ophalen; set; }openbaar
statischDateTime Date {get; set; }openbaar
statischbool Type {get; set; } -
Stuur geen JSON-array als u slechts 1 object wilt, het zal niet deserialiseren. U verwacht een enkel object, geen array, dus stuur geen array.
-
Je hebt Type als bool, maar je verzendt string "1", dit zal niet deserialiseren naar echte waarde zoals je zou verwachten. Stuur true/false (niet "true"/"false") of verander het type Type in string.
-
Weg met dat privé-itemveld, je hebt het niet nodig:
privé-notitie-item; -
Weg met die constructeurs die je daar hebt
public Note(string json)openbare notitie (opmerking)Niet alleen dat ze nergens op slaan en niet werken, je hebt ze ook niet nodig omdat JSON deserializer de velden voor je zal vullen.
BEWERKEN: U zegt bijvoorbeeld dat het niet bouwt omdat er geen constructor meer is met één parameter. Natuurlijk bouwt het niet, er is deze lijn
Note notesdata = new Note(item);
maar die lijn heb je niet nodig. Wat is het idee achter deze lijn? U wilt een instantie van de Note-klasse, maar u hebt deze al in de variabele "item". U hoeft daar geen tweede kopie van te maken. Dus doe dit ook weg.
Een andere reden waarom het niet compileert, is dat je die statische velden verwijdert, terwijl je dit nog in je Add-methode hebt:
cmd.Parameters.Add("@Text", SqlDbType.VarChar).Value = Note.Text.Trim();
cmd.Parameters.Add("@When", SqlDbType.DateTime).Value = Note.Date;
en ik ben er vrij zeker van dat u dat niet wilt. In plaats daarvan wilt u de instantie van het object gebruiken dat naar u is verzonden:
cmd.Parameters.Add("@Text", SqlDbType.VarChar).Value = item.Text.Trim();
cmd.Parameters.Add("@When", SqlDbType.DateTime).Value = item.Date;
Een ander ding is dat er meestal geen reden is waarom de methode Add het object dat aan DB wordt toegevoegd, zou retourneren. Dus voel je vrij om dit te veranderen
public Note Add(Note item)
naar dit
public void Add(Note item)
en stuur niets terug, je hebt het niet nodig.
Ik ben geen expert op het gebied van SqlConnection en dingen eromheen, dus dat deel zal ik niet becommentariëren. Ik gebruik EF in mijn projecten voor het werken met DB. Er kunnen dus wat problemen zijn in dat deel, maar daar kan ik geen commentaar op geven.