Tôi cần phải deserialize một số đối tượng JavaScript được trình bày trong JSON thành một lớp C# thích hợp. Với các tính năng tốt đẹp của các thuộc tính tự động, tôi muốn có chúng trong các lớp này thay vì chỉ có các trường. Thật không may, công cụ tuần tự hóa .NET (ít nhất, theo mặc định) hoàn toàn bỏ qua các thuộc tính tự động trên deserialization và chỉ quan tâm đến trường sao lưu, mà rõ ràng là không có trong đối tượng JavaScript.C# tự động hóa thuộc tính tự động hóa của JSON
Cho rằng có no standard way to name backing fields và thành thật mà nói, tôi thậm chí không muốn bận tâm với phương pháp "chúng ta hãy tạo đối tượng JavaScript trông giống như có phương pháp C# sao lưu" vì nó có vẻ hơi bẩn, cách duy nhất tôi có thể tuần tự hóa các trường JavaScript thành các thuộc tính tự động của C# nếu tôi có thể ép buộc công cụ tuần tự hóa bằng cách nào đó bỏ qua trường sao lưu và sử dụng thuộc tính trực tiếp. Thật không may, tôi không thể tìm ra cách này được thực hiện hoặc nếu điều này có thể được thực hiện ở tất cả. Có những câu chuyện mới trên trang chủ.
EDIT: Dưới đây là một ví dụ:
Javascript:
function Cat()
{
this.Name = "Whiskers";
this.Breed = "Tabby";
}
var cat = new Cat();
Đây là sau đó tuần tự để "{Name: 'Whiskers'}".
C class #:
[Serializable()]
public class Cat
{
public string Name { get; set; }
public string Breed { get; set; }
}
Và mã deserialization, thất bại:
new DataContractJsonSerializer(typeof(Cat)).ReadObject(inputStream);
Và nó là rõ ràng từ các ngoại lệ mà nó không thành công bởi vì nó đang tìm kiếm các lĩnh vực sao lưu.
EDIT2: Đây là ngoại lệ, nếu điều đó giúp (không có ngoại lệ bên trong):
System.Runtime.Serialization.SerializationException
"Các loại hợp đồng dữ liệu 'Test.Cat' không thể được deserialized vì thành viên dữ liệu bắt buộc '
<Name>k__BackingField, <Breed>k__BackingField
' không phải là được tìm thấy. "
Bạn có thể đăng một ví dụ về ý của mình không? –
@John Saunders - giả sử tôi có một đối tượng JavaScript được gọi là "Mèo" với một trường duy nhất có tên "Tên" với giá trị "Râu". Giả sử điều này được biểu diễn bằng JSON. Tôi muốn lấy JSON này và tuần tự hóa nó thành một thể hiện của lớp C# Cat (được viết bởi tôi) để quá trình tuần tự hóa điền vào thuộc tính tự động "Tên" của cá thể với "Râu". –
... nhưng vấn đề là bộ nối tiếp đang tìm kiếm trường sao lưu (ví dụ: " k_backingField" nhưng không nhất thiết với tên này ") và không phải là" Tên ". –