Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当我将具有enum属性的类的对象序列化为JSON时,如果该值为null,则生成的JSON将被删除_C#_Json_Enums - Fatal编程技术网

C# 当我将具有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。只需将您的名字绑定到一组唯一的整数。然后还可以绑定另一

当我将具有enum属性的类的对象序列化为JSON时,如果值为null,则生成的JSON字符串具有如下名称-值对:

"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