2009-02-10 24 views
6

Khi tôi sắp xếp một đối tượng của một lớp có thuộc tính enum thành JSON, nếu giá trị là null, chuỗi json kết quả có cặp giá trị tên như sau:Khi tôi tuần tự hóa một đối tượng của một lớp với thuộc tính enum thành JSON, nếu giá trị là null, kết quả là json được borked

"controlType":"-2147483648" 

Điều này gây ra sự cố khi tôi deserialize chuỗi thành đối tượng được nhập mạnh.

Cách tốt nhất để xử lý enums và null là gì?

+0

Câu hỏi này có được trả lời theo ý thích của bạn không? – DMCS

Trả lời

0

xem xét:

echo json_encode(array("test"=>null)); 

này tạo ra:

{"test":null} 

Cách tốt nhất để xử lý sự đếm là với một phím, mảng giá trị hoặc một stdClass. Chỉ cần liên kết tên của bạn với một tập hợp các số nguyên duy nhất. Sau đó bạn có thể liên kết một hướng khác cũng như:

{ "A": 1, "B": 2, "C": 3, 1: "A", 2: "B", 3: "C"}

Điều này ít nhất mang lại cho bạn hai hướng.

5

mã bên dưới cung cấp cho bạn json = '{"Tên": "Kiểm tra", "Id": 1, "MyEnum": 3}', khi bạn có giá trị không null.

 public enum SerializeObjTestClassEnum 
    { 
     one = 1, two, three, four 
    } 

    [Serializable] 
    public class SerializeObjTestClass 
    { 
     public string Name { get; set; } 
     public int Id { get; set; } 
     public SerializeObjTestClassEnum MyEnum{ get; set; } 
    } 

    public void SerializeObject_Test_Basic_Object() 
    { 
     var obj = new SerializeObjTestClass { Id = 1, Name = "Test", MyEnum = SerializeObjTestClassEnum.three }; 
     var json = (new JavaScriptSerializer()).Serialize(obj); 
    } 

mã này mang đến cho bạn json = '{ "Tên": "Test", "Id": 1, "MyEnum": 0}'

var obj = new SerializeObjTestClass { Id = 1, Name = "Test" }; 

Thông báo như thế nào enum, khi không được thiết lập, được tuần tự hóa thành 0, trong khi enum chính nó bắt đầu ở 1. Vì vậy, đây là cách bạn mã có thể biết một giá trị NULL đã được sử dụng cho enum.

nếu bạn muốn json trông giống như '{"Name": "Test", "Id": 1, "MyEnum": null}', thì bạn sẽ cần giả mạo nó bằng cách sử dụng trình bao bọc lớp quanh Enum.

+0

Trình bao bọc 'là Nullable ', thay thế 'MyEnum' bằng' MyEnum? '. – dbkk

Các vấn đề liên quan