C# 当我将具有enum属性的类的对象序列化为JSON时,如果该值为null,则生成的JSON将被删除
当我将具有enum属性的类的对象序列化为JSON时,如果值为null,则生成的JSON字符串具有如下名称-值对:C# 当我将具有enum属性的类的对象序列化为JSON时,如果该值为null,则生成的JSON将被删除,c#,json,enums,C#,Json,Enums,当我将具有enum属性的类的对象序列化为JSON时,如果值为null,则生成的JSON字符串具有如下名称-值对: "controlType":"-2147483648" 当我将字符串反序列化为强类型对象时,这会导致问题 处理枚举和空值的最佳方法是什么?请考虑: echo json_encode(array("test"=>null)); 这将产生: {"test":null} 处理枚举的最佳方法是使用键、值数组或stdClass。只需将您的名字绑定到一组唯一的整数。然后还可以绑定另一
"controlType":"-2147483648"
当我将字符串反序列化为强类型对象时,这会导致问题
处理枚举和空值的最佳方法是什么?请考虑:
echo json_encode(array("test"=>null));
这将产生:
{"test":null}
处理枚举的最佳方法是使用键、值数组或stdClass。只需将您的名字绑定到一组唯一的整数。然后还可以绑定另一个方向:
{“A”:1,
“B”:2,
“C”:3,
1:“A”,
2:“B”,
3:“C”}
这至少给您提供了双向性。当您有一个非空值时,下面的代码为您提供json='{“Name”:“Test”,“Id”:1,“MyEnum”:3}'
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);
}
此代码为您提供json='{“Name”:“Test”,“Id”:1,“MyEnum”:0}'
var obj=new serializedObjTestClass{Id=1,Name=“Test”}代码>
请注意,未设置时,枚举如何序列化为0,而枚举本身从1开始。这就是代码如何知道枚举使用了NULL值
如果希望json看起来像“{“Name”:“Test”,“Id”:1,“MyEnum”:null}”,那么需要在枚举周围使用类包装来伪造它 这个问题得到你喜欢的答案了吗?包装器可以为空
,用MyEnum?
替换MyEnum
。