OK, więc jest kilka rzeczy, które musisz zmienić, aby działało:
-
Dodaj konstruktor bez parametrów do Note'a, ponieważ będzie potrzebny do deserializacji:
public Note() { }
-
Pozbądź się "statycznych" w polach Note:
publiczne
statycznestring Klient { get; ustawić; }publiczne
statyczneint Sprawa { get; ustawić; }publiczne
statyczneciąg Tekst { get; ustawić; }publiczne
statyczneint NoteId { get; ustawić; }publiczne
statyczneciąg R1 { pobierz; ustawić; }publiczne
statyczneciąg R2 { get; ustawić; }publiczne
statyczneciąg S1 { pobierz; ustawić; }publiczne
statyczneDateTime Data { get; ustawić; }publiczne
statycznebool Wpisz { get; ustawić; } -
Nie wysyłaj tablicy JSON, jeśli chcesz tylko 1 obiekt, nie zostanie on zdeserializowany. Oczekujesz pojedynczego obiektu, a nie tablicy, więc nie wysyłaj tablicy.
-
Masz Type as bool, ale wysyłasz ciąg "1", to nie zostanie zdeserializowana do prawdziwej wartości, jak można się było spodziewać. Wyślij true/false (nie "true"/"false") lub zmień typ Type na string.
-
Pozbądź się tego prywatnego pola, nie potrzebujesz go:
prywatna uwaga; -
Pozbądź się tych konstruktorów, które tam masz
notatka publiczna (string json)notatka publiczna (pozycja Uwaga)Nie tylko, że nie mają sensu i nie będą działać, nie potrzebujesz ich, ponieważ deserializator JSON wypełni pola za Ciebie.
EDYTUJ: Na przykład mówisz, że nie buduje, ponieważ nie ma już konstruktora z jednym parametrem. Oczywiście nie buduje, jest taka linia
Note notesdata = new Note(item);
ale nie potrzebujesz tej linii. Jaka jest idea tej linii? Chcesz instancję klasy Note, ale masz ją już w zmiennej "item". Nie musisz tworzyć drugiej kopii tego. Więc pozbądź się tego też.
Innym powodem, dla którego się nie skompiluje, jest to, że pozbywasz się tych pól statycznych, podczas gdy nadal masz to w swojej metodzie Add:
cmd.Parameters.Add("@Text", SqlDbType.VarChar).Value = Note.Text.Trim();
cmd.Parameters.Add("@When", SqlDbType.DateTime).Value = Note.Date;
i jestem pewien, że tego nie chcesz. Zamiast tego chcesz użyć instancji obiektu, który został do Ciebie wysłany:
cmd.Parameters.Add("@Text", SqlDbType.VarChar).Value = item.Text.Trim();
cmd.Parameters.Add("@When", SqlDbType.DateTime).Value = item.Date;
Inną rzeczą jest to, że zwykle nie ma powodu, dla którego metoda Add zwracałaby dodawany obiekt do bazy danych. Możesz to zmienić
public Note Add(Note item)
do tego
public void Add(Note item)
i nie zwracaj niczego, nie potrzebujesz tego.
Nie jestem ekspertem od SqlConnection i rzeczy z nim związanych, więc tej części nie komentuję. Używam EF w moich projektach do pracy z DB. W tej części mogą być więc pewne problemy, ale nie mogę tego komentować.