当我将具有枚举属性的类的对象序列化为JSON时,如果该值为null,则生成的json字符串具有如下的名称值对:
"controlType":"-2147483648"
当我将字符串反序列化为强类型对象时,这会导致问题.
处理枚举和空值的最佳方法是什么?
下面的代码为你提供了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 SerializeObjTestClass { Id = 1, Name = "Test" };
注意枚举在未设置时是如何序列化为0,而枚举本身从1开始.这就是你的代码如何知道用于枚举的NULL值.
如果你想让json看起来像' {"Name":"Test","Id":1,"MyEnum":null} ',那么你需要通过使用类包装器来伪造它枚举.