s d*_*s d 11 .net c# json json.net deserialization
如果我有这样的课程:
[DataContract(Name = "", Namespace = "")]
public class MyDataObject
{
[DataMember(Name = "NeverNull")]
public IList<int> MyInts { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当下列字符串被反序列化时,有没有办法让MyInts字段成为非空的空列表?
string serialized = @"{""NeverNull"":null}";
MyDataObject myDataObject = JsonConvert.DeserializeObject<MyDataObject>(serialized);
Run Code Online (Sandbox Code Playgroud)
我正在使用Newtonsoft.Json
我想问的原因是,我有一个相当复杂的JSON请求解析,它包含对象列表的巢,我想反序列化的代码来创建这些对象,以便我能避免大量的无效检查:
if (foo.bar != null)
{
foreach (var bar in foo.bar)
{
if (bar.baz != null)
{
foreach (var baz in bar.baz)
{
...
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 13
也许添加一个序列化后回调,在反序列化结束时检查它?
[DataContract(Name = "", Namespace = "")]
public class MyDataObject
{
[OnDeserialized]
public void OnDeserialized(StreamingContext context)
{
if (MyInts == null) MyInts = new List<int>();
}
[DataMember(Name = "NeverNull")]
public IList<int> MyInts { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
还要注意JsonConvert(不像DataContractSerializer)执行默认构造函数,所以通常你也可以添加一个默认构造函数:
public MyDataObject()
{
MyInts = new List<int>();
}
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下,explict "NeverNull":null会null在反序列化期间将其更改回来,因此我之所以使用了回调.
| 归档时间: |
|
| 查看次数: |
4031 次 |
| 最近记录: |