我有以下JSON
{
"PROPERTY1": "vvv",
"PROPERTY2": "aa",
}
我想用以下数据模型类反序列化
public class Class1
{
public Class1()
{
}
[JsonProperty(Required = Required.Always)]
public string PROPERTY1{ get; set; }
[JsonProperty(Required = Required.Always)]
public string PROPERTY2{ get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public decimal PROPERTY3 { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string PROPERTY4 { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public SomeObject PROPERTY5 { get; set; }
}
并使用以下序列化代码
deserializedResponse = JsonConvert.DeserializeObject<Class1>(response);
因此我希望收到带有PROPERTY1和PROPERTY2的Class1, 实际上,当PROPERTY3为0时,我得到所有4个属性,PROPERTY4 = null,PROPERTY5 =&#34;&#34;。
尝试将序列化设置作为2参数传递
JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
};
没有帮助。
我希望Class1对象没有PROPERTY3,如果它们不存在于JSON中,则需要PROPERTY4和PROPERTY5
有什么建议吗?
答案 0 :(得分:2)
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public decimal PROPERTY3 { get; set; }
您的属性是值类型。那就是它总是有价值的。它得到一个0,当你分配时它会改变。您必须转换为Nullable类型才能使该属性变为null。
您也可以使用动态。见这里:Deserialize json object into dynamic object using Json.net
这允许您仅使用存在的属性。其他问题的答案解释了如何检查属性是否存在:How do I check if a property exists on a dynamic anonymous type in c#?
答案 1 :(得分:1)
如果你不想要PROPERTY3和PROPERTY4,如果他们不在json中,你应该像这样反序列化:
deserializedResponse = JsonConvert.DeserializeObject<object>(response, jsonSerializerSettings);
我的意思是代替反序列化到class1,你应该反序列化为通用对象。我对这个porpouse不太确定。
答案 2 :(得分:1)
在这种情况下,您应该创建一个继承:
带有PROPERTY1和PROPERTY2的 Class1
。
Class2
,派生于Class1,包含PROPERTY3,PROPERTY4和PROPERTY5。
NullValueHandling
仅用于序列化目的。