当我将具有枚举属性的类的对象序列化为JSON时,如果该值为null,则生成的json字符串具有如下的名称值对:
"controlType":"-2147483648"
Run Code Online (Sandbox Code Playgroud)
当我将字符串反序列化为强类型对象时,这会导致问题.
处理枚举和空值的最佳方法是什么?
下面的代码为你提供了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);
}
Run Code Online (Sandbox Code Playgroud)
此代码为您提供json =' {"Name":"Test","Id":1,"MyEnum":0} '
var obj = new SerializeObjTestClass { Id = 1, Name = "Test" };
Run Code Online (Sandbox Code Playgroud)
注意枚举在未设置时是如何序列化为0,而枚举本身从1开始.这就是你的代码如何知道用于枚举的NULL值.
如果你想让json看起来像' {"Name":"Test","Id":1,"MyEnum":null} ',那么你需要通过使用类包装器来伪造它枚举.
考虑:
echo json_encode(array("test"=>null));
Run Code Online (Sandbox Code Playgroud)
这会产生:
{"test":null}
Run Code Online (Sandbox Code Playgroud)
处理枚举的最佳方法是使用键、值数组或 stdClass。只需将您的名字绑定到一组唯一的整数即可。然后你也可以绑定另一个方向:
{"A":1, "B":2, "C":3, 1:"A", 2:"B", 3:"C"}
这至少给你双向性。
归档时间: |
|
查看次数: |
7754 次 |
最近记录: |