【发布时间】:2015-04-18 07:44:00
【问题描述】:
我有一个在 C# 中定义为类的数据模型。我需要使用 JObject.Merge 合并两个对象,但对于一个特定属性,我需要忽略来自第二个对象的空字符串值,类似于忽略空值的方式。是否有一个现有的属性属性,或者我是否需要自己编写?
void Main()
{
string json1 = @"{ Foo: ""foo1"", Bar: ""bar1"" }";
string json2 = @"{ Foo: ""foo2"", Bar: null }";
string json3 = @"{ Foo: ""foo3"", Bar: """" }";
var model1 = JObject.Parse(json1);
var model2 = JObject.Parse(json2);
model1.Merge(model2);
model1.Dump();
model1 = JObject.Parse(json1);
model2 = JObject.Parse(json3);
model1.Merge(model2);
model1.Dump();
}
public class Model
{
[JsonProperty("foo")]
public string Foo { get ; set; }
[JsonProperty("bar", NullValueHandling = NullValueHandling.Ignore)]
public string Bar { get ; set; }
}
Output (1): Model.Bar = "bar1"
Output (2): Model.Bar = "";
Desired output of (2): Model.Bar = "bar1"
编辑:好的,我意识到无法应用属性,因为我只需要使用原始 json 字符串作为输入。这主要是因为我的类具有默认值的属性。合并具有空值的类会触发默认值并最终覆盖原始值,这是我不想要的。我需要能够获取类的部分 json 表示并更新原始数据。抱歉,如果从一开始就不清楚。我会更新我最终回答的内容。
【问题讨论】:
-
您所说的“是否存在此属性”是什么意思?
JsonMergeSettings的房产?还是JObject本身的属性?
标签: c# json serialization json.net