【问题标题】:Ignore missing fields in while Deserialisation using newtonsoft使用 newtonsoft 进行反序列化时忽略缺失的字段
【发布时间】:2016-12-09 07:08:19
【问题描述】:

我已经为反序列化创建了模型,例如,

class Object 
{
     public string prop1 {get; set}
     public string prop2 {get; set}
}

现在这只有在我的 JSONstring 包含两个字段时才有效,即

{
    "prop1" : "value prop1",
    "prop2" : "value prop2"
}

但是如果我在 JSON 中只有一个属性,这将失败,即

{
    "prop1" : "value1"
}

当缺少属性并使其成为选项时,我如何反序列化。

【问题讨论】:

  • ...所以我们仍然不知道什么失败了——提供的代码没有失败。当然,除了它甚至不能编译(set 之后缺少分号)。为了能够提供帮助,我们需要一个 a) 编译且 b) 失败的示例。
  • “但这会失败”,它不会失败。使用您在此处提供的示例,它将毫无问题地反序列化。当出现错误时,分享错误可能是个好主意。
  • Works fine for me。你能创建一个显示错误的MCVE 吗?

标签: c# json.net deserialization


【解决方案1】:

你可以去Dynamic

dynamic stuff = JsonConvert.DeserializeObject("{"prop1" : "value prop1","prop2" : "value prop2"}");
string p1 = stuff.prop1;
string p2 = stuff.prop2;

Newtonsoft.Json.Linq

dynamic stuff = JObject.Parse("{"prop1" : "value1"}");
string p1 = stuff.prop1;

【讨论】:

  • 嗨@Vinodh,如果有帮助,您可以投票赞成答案,如果此答案解决了您的问题,请单击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
【解决方案2】:

此代码按原样工作(除了在集合后缺少分号)。

另一方面,如果您希望在这种情况下出现错误,请使用

[JsonProperty(Required = Required.Always)][JsonProperty(Required = Required.DisallowNull)]

【讨论】:

    猜你喜欢
    • 2018-07-21
    • 1970-01-01
    • 2017-02-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    相关资源
    最近更新 更多