Десериализовать json (объект javascript) в объект c #

#c# #json #serialization

#c# #json #сериализация

Вопрос:

у меня есть следующий объект javascript, он выглядит как json, но когда я анализирую его как json, я получаю ошибки:

 {
  "1": {
    "name": "Manheim Simulcast ",
    "items": {
      "2": {
        "pos": "52",
        "name": "NY - Manheim Albany",
        "address": "",
        "zip": "12201",
        "coords": ""
      }
    }
  }
}
  

и следующие классы:

 public class auction_js_min
{
        public auction_id auction_id { set; get; }
    }

    public class auction_id
    {
        public string name { set; get; }
        public Items items { set; get; }
    }

    public class Items
    {
        public Sub_auction_id sub_auction_id { set; get; }

    }

    public class Sub_auction_id
    {
        public string pos { get; set; }
        public string name { get; set; }
        public string address { get; set; }
        public string zip { get; set; }
        public string coords { get; set; }
    }
  

когда я десериализую его в объект C #, я получаю пустой объект:

 auction_js_min obj = JsonConvert.DeserializeObject<auction_js_min>(auction_js);
  

есть какие-нибудь идеи, как это исправить? объект javascript имеет слишком большой символ 87000, и я хочу выполнить итерацию по объектам и проверить значения.

Комментарии:

1. Вам следует опубликовать полученную ошибку, чтобы мы могли лучше помочь вам

2. с помощью следующего кода я не получил никакой ошибки, просто пустой объект.

Ответ №1:

Я думаю, что здесь вы сталкиваетесь с тем, что ваши объекты пронумерованы, и вы не можете назвать класс, используя только номер. В этом случае ваша модель не соответствует вашему JSON, поэтому все, что вы получите, это null. Вам нужно изменить свою модель, чтобы она соответствовала имеющемуся у вас JSON, а затем вы можете сопоставить эту модель DTO с чем-то более удобным для использования в C #.

Вот пример модели, которая десериализует ваш JSON:

 public class auction_id
{
    public string name { set; get; }
    public IDictionary<int, Sub_auction_id> items { set; get; }
}

public class Sub_auction_id
{
    public string pos { get; set; }
    public string name { get; set; }
    public string address { get; set; }
    public string zip { get; set; }
    public string coords { get; set; }
}
  

А затем десериализуйте вот так:

 public void Deserialize()
{
    var auction = JsonConvert.DeserializeObject<IDictionary<int, auction_id>>(json);
}
  

Комментарии:

1. это десериализует часть json, я получаю название аукциона, но объект items снова равен нулю.

Ответ №2:

Я думаю, вы можете использовать JsonProperty здесь.
Обычно эти имена недопустимы, но их можно разобрать следующим образом.

 public class auction_js_min
{
        [JsonProperty("1")]
        public auction_id auction_id { set; get; }
    }

    public class auction_id
    {
        public string name { set; get; }
        public Items items { set; get; }
    }

    public class Items
    {
        [JsonProperty("2")]
        public Sub_auction_id sub_auction_id { set; get; }

    }

    public class Sub_auction_id
    {
        public string pos { get; set; }
        public string name { get; set; }
        public string address { get; set; }
        public string zip { get; set; }
        public string coords { get; set; }
    }
  

Комментарии:

1. во всей строке разные числа. это работает для обеспечения спокойствия json.

Ответ №3:

Это из-за одинарных кавычек. Оба следующих действия будут работать:

  • Если вы знаете, что ваш объект правильный, пропустите строковую кавычку и непосредственно выполните ее оценку:
     eval({'1': {'name': 'Manheim Simulcast','items':{'2':{'pos': '52','name': 'NY - Manheim Albany','address': '','zip': '12201','coords': ''}}}})
      
  • Или используйте двойные кавычки внутри JSON и одинарные кавычки, чтобы преобразовать его в строку, подобную этой:
     JSON.parse('{"1": {"name": "Manheim Simulcast","items":{"2":{"pos": "52","name": "NY - Manheim Albany","address": "","zip": "12201","coords": ""}}}}')
      

Что касается их преобразования в объект C #. Это может быть несколько вещей, нужны более подробные сведения.

Комментарии:

1. Операционная система спрашивает, как десериализовать JSON в объект C #, это не отвечает на вопрос операционной системы.

2. Правильно прочитайте вопрос, в первой части говорится о синтаксическом анализе JSON: «у меня есть следующий объект javascript, он выглядит как json, но когда я анализирую его как json, я получаю ошибки:»

3. достаточно справедливо, но вам нужно отредактировать свой ответ для меня, чтобы убрать отрицательный ответ