c # загрузить Json в унаследованный класс

У меня есть классы 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; }
}

My 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?

3
задан 13 August 2018 в 16:06

2 ответа

Проблема связана с именованием. В JSON это имя Settlements. Но в определении класса OrderFund он называется SettlementsSap

0
ответ дан 15 August 2018 в 17:00

Вы просто используете функцию Visual Studio, которая преобразует ваш json в класс модели

Перейти: Edit -> Paste special -> Paste JSON as Class

Созданный класс модели по этой функции решит вашу проблему

Итак, видимо, вы должны переименовать 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; }
        }
2
ответ дан 15 August 2018 в 17:00
  • 1
    Вы скопировали последний вопрос? ахаха – Marco Salerno 13 August 2018 в 15:35
  • 2
    Я не знал об этой функции в Edit, cool +1 – Erik Šťastný 13 August 2018 в 15:36
  • 3
    @MarcoSalerno Вы имеете в виду? – Thierry V 13 August 2018 в 15:36
  • 4
    Я видел вопрос с тем же решением, отправленным другим пользователем, который вы копировали, например, несколько минут назад (вы ответили иначе в этом вопросе) – Marco Salerno 13 August 2018 в 15:38
  • 5
    @MarcoSalerno ха-ха. Я отвечаю на вопрос и узнаю другие лучшие ответы в то же время :) – Thierry V 13 August 2018 в 15:39

Другие вопросы по тегам:

Похожие вопросы: