我有以下要求,需要使用json.net合并两个JSON对象。以下是示例代码
string jsonText = @"
{
""food"": {
""fruit"": {
""apple"": {
""colour"": ""red"",
""size"": ""small""
},
""orange"": {
""colour"": ""orange"",
""size"": ""large""
}
}
}
}";
var foodJsonObj = JObject.Parse(jsonText);
var foodJsonToken = foodJsonObj.SelectToken("food.fruit") as JObject;
var bananaJson = JObject.Parse(@"{ ""banana"" : { ""colour"": ""yellow"", ""size"": ""medium""}, ""simpletype"":""simplevalue"", ""orange"":{ ""newprop"": ""newpropvalue"" } }");
var bananaToken = bananaJson as JObject;
foreach (var token1 in bananaToken)
{
**var existingTokens = foodJsonToken.Children();
foreach (var item in existingTokens)
{
var existingObject = item as JObject;
}
if (existingTokens.Contains(token1.Key))
{
foodJsonToken.Merge(token1, new JsonMergeSettings
{
MergeArrayHandling = MergeArrayHandling.Union
});
}**
else
{
foodJsonToken.Add(token1.Key, token1.Value);
}
}
json = foodJsonToken.ToString();
在上面的示例中,我想将香蕉json合并到食物json
上面的代码在没有Hightlipt的代码的情况下工作,如果Bananajson没有食物JSON中的"橙色"属性
如果两者都具有相似的属性集,则上述代码不起作用。是否有任何方法可以使用LINQ查找现有元素,如果存在,我想合并JSON,它将与新属性更新源。
问候,amar
如果您的结构主要JSON总是相同的,则可以创建两个类:
a)带有水果收集的主要班级食物b)带有田野的水果类:颜色和大小
您可以轻松地从食品类收藏中添加/取出任何水果。您可以使用Newtonsoft图书馆序列化/应对食物或水果级别。
整个代码应该看起来像:
[DataContract]
class Food
{
[DataMember]
public ArrayList<Fruit> Fruit { get; set; }
}
[DataContract]
class Fruit
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Colour { get; set; }
[DataMember]
public string Size{ get; set; }
}
示例用法:
var sampleFoodInstanc = new Food();
sampleFoodInstance.Fruit.Add( new Fruit() { Name: "Apple", Colour: "Red", Size: "Big" } );
// serialize process
var sz = JsonConvert.SerializeObject( sampleFoodInstance );
// deserialize process
JsonConvert.DeserializeObject<Food>( sz );