我有一个JSON文件,其中嵌套了一个对象,如下所示:
{ "MyObject" : { "prop1": "Value1", "prop2" : "Value2"}
"Message" : "A message"}
有时,嵌套在JSON中的对象可能为空。
{ "MyObject" : null
"Message" : "A message"}
我尝试使用Newtonsoft.Json将此对象反序列化为JsonObject
类型的T,它具有两个属性:
MyObject
和Message
.
JsonObject看起来像这样:
public class JsonObject
{
public MyObject MyObject { get; set; }
public string Message { get; set; }
}
Message只是一个字符串,但MyObject是一个对象,它具有一些其他(私有)属性以及构造函数:
public class MyObject
{
public MyObject(string prop1, string prop2)
{
this.prop1= prop1;
this.prop2= prop2;
}
public string prop1 { get; private set; }
public string prop2 { get; private set; }
}
我的反序列化代码如下所示:
using (StreamReader reader = new StreamReader(filename))
{
string jsonFile = reader.ReadToEnd();
return JsonConvert.DeserializeObject<JsonObject>(jsonFile);
}
但是它抛出了一个错误:
异常:对象引用未设置为对象的示例
当MyObject对象为null时会发生这种情况。我打印了jsonFile,输出如下:
{"MyObject": null, "Message": "sample message"}
我需要的是将MyObject反序列化为null。因此,当代码运行时,最终结果是JsonObject
,其中
MyObject = null
和Message = "sample message"
.
我如何使用Newtonsoft.json来完成这个任务?
1条答案
按热度按时间fkaflof61#
我用你上面提供的东西做了一个小测试,发现MyObject和Message之间缺少了一个逗号。除此之外,一切都很好。通过debug检查对象,会显示所有的解析都正常。