C#将Json加载到继承类中

3

我有一个C#类,需要将JSON解析成它。

该类包含另一个类的List<>

该类的结构如下所示。

public class OrderFund {
  public int OrderID { get; set; }
  public int BrokerID { get; set; }
  public string SettlementMethod { get; set; }
  public List<SettlementSap> SettlementsSap { get; set; }
}

public class SettlementSap {
  public string SapMonetaryAccountNo { get; set; }
  public string SapMonetaryAccountType { get; set; }
  public string SapMonetaryAccountOffice { get; set; }
}

我的JSON数据长这样。

{
  "settlementMethod": "SAP",
  "BrokerID": 1,
  "OrderID": 1,
  "Settlements": [
    {
      "SapMonetaryAccountNo": "400245892464",
      "SapMonetaryAccountType": "CA",
      "SapMonetaryAccountOffice": "AR"
    }
  ]
}

我这样加载我的JSON文件...
static OrderFund LoadJson(string file) {
  string dire = Directory.GetCurrentDirectory();
  using (StreamReader r = new StreamReader(dire + "\\" + file)) {
    string json = r.ReadToEnd();
    OrderFund items = JsonConvert.DeserializeObject<OrderFund>(json);
    return items;
  }
}

数据已经成功加载到 OrderFun 类中,但是 OrderFund.SettlementsSap 是空的。 如何将 Settlements 加载到 SettlementsSap 中?

public List<SettlementSap> SettlementsSap { get; set; } 更改为 public List<SettlementSap> Settlements { get; set; } - er-sho
Json和你的类之间存在不匹配。Json中的属性名为“Settlements”,而类中的属性名为“SettlementsSap”。你可以通过https://dev59.com/OGIj5IYBdhLWcg3w4Y2S修改你的类以接受这个属性名。 - Drag and Drop
1
可能是反序列化时的备用属性名称的重复问题。 - Drag and Drop
3个回答

4
这是因为您将字段命名为SettlementsSap,但Json字段名为Settlements...。
您可以在类中重新命名该字段;
 public class OrderFund 
    {
        public int OrderID { get; set; }
        public int BrokerID { get; set; }
        public string SettlementMethod { get; set; }
        public List<SettlementSap> Settlements { get; set; }
    }

或者像这样在字段上添加 [JsonProperty("Settlements")] 属性:

public class OrderFund 
{
    public int OrderID { get; set; }
    public int BrokerID { get; set; }
    public string SettlementMethod { get; set; }
    [JsonProperty("Settlements")] 
    public List<SettlementSap> SettlementsSap { get; set; }
}

JsonProperty 很大。 - Joe Johnston

3

您只需要使用Visual Studio的一个函数,将您的JSON转换为模型类

方法如下: 编辑 -> 特殊粘贴 -> 将JSON作为类粘贴

这个功能创建的模型类将解决您的问题

因此,您必须将SettlementsSap重命名为Settlements

        public class OrderFund
        {
            public string settlementMethod { get; set; }
            public int BrokerID { get; set; }
            public int OrderID { get; set; }
            public Settlement[] Settlements { get; set; }
        }

        public class Settlement
        {
            public string SapMonetaryAccountNo { get; set; }
            public string SapMonetaryAccountType { get; set; }
            public string SapMonetaryAccountOffice { get; set; }
        }

1
你复制了最后一个问题吗?哈哈 - Marco Salerno
@MarcoSalerno 你的意思是什么? - Antoine V
2
我看到一个问题,另一个用户发布了相同的解决方案,你在几分钟前复制粘贴了它(你在那个问题中回答得不同)。 - Marco Salerno
@MarcoSalerno 哈哈。我回答了问题,同时学习了其他更好的答案 :) - Antoine V
是的,没问题,我们都在这里为了变得更好并互相帮助!:P - Marco Salerno

0
问题出在命名上。在 JSON 中,名称为 Settlements。但是在 OrderFund 类的定义中,它被命名为 SettlementsSap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接