OK, vì vậy có một số điều bạn cần thay đổi để làm cho nó hoạt động:
-
Thêm hàm tạo không tham số vào Ghi chú vì nó sẽ cần thiết cho quá trình giải mã hóa:
public Note() { }
-
Loại bỏ "tĩnh" trong các trường của Ghi chú:
công khai
tĩnhstring Khách hàng {get; bộ; }public
staticint Trường hợp {get; bộ; }public
staticstring Text {get; bộ; }public
staticint NoteId {get; bộ; }public
staticchuỗi R1 {get; bộ; }public
staticchuỗi R2 {get; bộ; }public
staticchuỗi S1 {get; bộ; }công khai
tĩnhDateTime Ngày {get; bộ; }công khai
tĩnhbool Loại {get; bộ; } -
Không gửi mảng JSON nếu bạn chỉ muốn 1 đối tượng, nó sẽ không giải kích thước. Bạn đang mong đợi một đối tượng duy nhất, không phải mảng, vì vậy đừng gửi mảng.
-
Bạn có Loại là bool, nhưng bạn đang gửi chuỗi "1", chuỗi này sẽ không chuyển hóa thành giá trị true như bạn có thể mong đợi. Gửi true / false (không phải "true" / "false") hoặc thay đổi loại Type thành chuỗi.
-
Loại bỏ trường mục riêng tư đó, bạn không cần nó:
mục Ghi chú riêng; -
Loại bỏ những công cụ tạo mà bạn có ở đó
Ghi chú công khai (chuỗi json)Ghi chú công cộng (Mục ghi chú)Không chỉ vậy chúng không có ý nghĩa gì và sẽ không hoạt động, bạn không cần chúng vì bộ giải mã JSON sẽ điền vào các trường cho bạn.
CHỈNH SỬA: Ví dụ, bạn nói rằng nó không xây dựng vì không còn một hàm tạo với một tham số. Tất nhiên nó không xây dựng, có dòng này
Note notesdata = new Note(item);
nhưng bạn không cần dòng đó. Ý tưởng đằng sau dòng này là gì? Bạn muốn một thể hiện của lớp Note, nhưng bạn đã có nó trong biến "item". Bạn không cần phải tạo một bản sao thứ hai của nó. Vì vậy, hãy loại bỏ điều này.
Một lý do khác, tại sao nó không biên dịch là bạn loại bỏ các trường tĩnh đó, trong khi bạn vẫn có trường này trong phương thức Thêm của mình:
cmd.Parameters.Add("@Text", SqlDbType.VarChar).Value = Note.Text.Trim();
cmd.Parameters.Add("@When", SqlDbType.DateTime).Value = Note.Date;
và tôi khá chắc chắn rằng bạn không muốn điều đó. Thay vào đó, bạn muốn sử dụng phiên bản của đối tượng đã được gửi cho bạn:
cmd.Parameters.Add("@Text", SqlDbType.VarChar).Value = item.Text.Trim();
cmd.Parameters.Add("@When", SqlDbType.DateTime).Value = item.Date;
Một điều khác là thường không có lý do gì tại sao phương thức Add lại trả về đối tượng được thêm vào DB. Vì vậy, hãy thoải mái thay đổi điều này
public Note Add(Note item)
tới đây
public void Add(Note item)
và không trả lại bất cứ thứ gì, bạn không cần nó.
Tôi không phải là chuyên gia về SqlConnection và những thứ xung quanh nó, nên phần đó tôi không bình luận. Tôi sử dụng EF trong các dự án của mình để làm việc với DB. Vì vậy, có thể có một số vấn đề trong phần đó, nhưng tôi không thể bình luận về điều đó.