【问题标题】:Combine two json files into one class instance将两个json文件合并为一个类实例
【发布时间】:2021-01-22 07:57:58
【问题描述】:

我有一个关于向类实例提供数据的问题。所以我有两个包含日常数据的 json 文件,我最终需要将它们作为一个类实例(以方便以后使用):

Json 1:

{id:1,days:[{day:1,data1:blah!, data2:blah2, data3:blah3},{day:2,data1:blah!, data2:blah2, data3:blah3},{ day:3,data1:blah!, data2:blah2, data3:blah3]}

Json2:

{id:1,days:[{day:1,data4:blah!, data5:blah2, data6:blah3},{day:2,data4:blah!, data5:blah2, data6:blah3},{ day:3,data4:blah!, data5:blah2, data6:blah3}]}

我有课

public class rootObject
{
    public int id {get; set;}
    public Days[] data {get; set;}
}

public class Days
{
    public Datetime day {get; set;}
    public string data1 {get; set;}
    public string data2 {get; set;}
    public string data3 {get; set;}
    public string data4 {get; set;}
    public string data5 {get; set;}
    public string data6 {get; set;}
}

我正在使用

rootObject myData = JsonSerializer.Deserialize<rootObject>(json1);

很好地提供了一半的数据。

我现在需要的是在匹配日期的同时将第二个文件中的数据添加到同一个 myData 中,这样我就可以拥有一个对象,以后可以一次从中提取所有字段。

目前我正在使用来自第二个 Json 的数据创建第二个 myData2,然后我使用嵌套循环和 if 来组合它们:

foreach(Day x in myData.data){
    foreach(Day y in myData2.data){
        if(x.day == y.day){
            x.data4 = y.data4
            // (and so on)
        }
    }
}

尽管上面的方法有效,但我经常使用它,它使代码变得一团糟。必须有一种更快、更优雅的方式来做到这一点。

【问题讨论】:

  • 为什么两个json有相同的id?
  • 我会制作 2 种类型来反序列化这些不同的 json。然后将另一种类型转换为您需要的数据。转换是不可避免的,并且与您所做的相同。
  • id 和 this 一样是客户端 ID,这部分数据无关。最重要的是,我需要将“天”合并为一个类实例,以后可以使用

标签: c# json .net merge


【解决方案1】:

我不确定我是否理解您选择将两个不同的数据集表示为一个类的选择,但话说回来,我并没有全面了解。如果您想要实现的是明智的选择,Newtonsoft.Json 具有合并两个 JSON 的方法(尽管您必须使用无类型的 JObject 方法并在合并后转换为类型)。您可以执行以下操作:

var first = JObject.Parse(jsonString1);
var second = JObject.Parse(jsonString2);

var merged = new JObject();
merged.Merge(first);
merged.Merge(second);

var result = merged.ToObject<YourAggregatedClass>();

【讨论】:

  • siemanko Polska ;-) 我这样使用它的原因是这是关于客户营销活动的数据。一组来自我的内部资源 (API),另一组来自客户端。数据是“每天”。最终我正在 blazo 中构建一个 web 应用程序,并且需要在一个 DataGrid 中呈现来自两个集合的数据,因此需要将所有这些数据合并为一个类的实例。
  • @MichałPoterek 很公平 - 上面的代码应该对你有用。你试过了吗?
猜你喜欢
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多