#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. достаточно справедливо, но вам нужно отредактировать свой ответ для меня, чтобы убрать отрицательный ответ