#c# #json
#c# #json
Вопрос:
У меня есть следующий JSON, который мне нужно отправить в API:
{
"arch": {
"id": “TrackingCode”
},
"nails": [{
"name": "John"
}],
"token": 'RandomCode'
}
Итак, я определяю данные таким образом:
public class arch
{
[JsonProperty("id")]
public string id { get; set; }
}
public class nails
{
[JsonProperty("name")]
public string[] name { get; set; }
}
public class Parameter
{
[JsonProperty("arch")]
public arch arch { get; set; }
[JsonProperty("nails")]
public nails nails{ get; set; }
[JsonProperty("token")]
public string token { get; set; }
}
Вот как я инициализирую JSON перед его сериализацией:
Parameter json = new Parameter
{
arch = new arch
{
id = TrackingId
},
nails = new nails
{
name = "John"
}
token = "randomstuff"
};
Но есть ошибка синтаксиса / форматирования, связанная с полем «name», которое не допускает компиляцию. Очевидно, что это структура массива этого элемента. Что я делаю неправильно с точки зрения синтаксиса?
Комментарии:
1. nails — это не массив, это объект в вашем определении. Вместо этого вы могли бы попробовать определить nails как nails[], а затем заполнить его как таковой.
Ответ №1:
В вашем параметре object измените nails nails
на либо nails[]
, либо IEnumerable<nail> nails
. Причина, по которой ваш json выходит не так, как вам хотелось бы, заключается в том, что nails — это объект, поэтому единственная сущность, а массив — это несколько сущностей, как вы и предполагали
Ответ №2:
Что касается предоставленного вами кода, ошибка компиляции заключается в том, что вы определили name как массив строк, но затем пытаетесь присвоить ему строку. Измените на массив строк, и он будет скомпилирован нормально:
Parameter json = new Parameter
{
arch = new arch
{
id = "1"
},
nails = new nails
{
name = new string[]{"John"}
},
token = "randomstuff"
};
Тем не менее, это не соответствовало бы вашему первоначальному требованию, которое заключалось в том, что nails должен быть массивом, а не именем в nails. Итак, вам нужно что-то более похожее:
public class arch
{
public string id { get; set; }
}
public class nails
{
public string name { get; set; }
}
public class Parameter
{
public arch arch { get; set; }
public nails[] nails { get; set; }
public string token { get; set; }
}
…
Parameter json = new Parameter
{
arch = new arch
{
id = "1"
},
nails = new nails[]
{
new nails(){name = "John"}
},
token = "randomstuff"
};
Ответ №3:
Я рекомендую вам использовать http://json2csharp.com /, это может быть полезно для генерации объектов класса для вашего JSON.
Используя этот инструмент, у вас есть:
public class Arch
{
public string id { get; set; }
}
public class Nail
{
public string name { get; set; }
}
public class Parameter
{
public Arch arch { get; set; }
public List<Nail> nails { get; set; }
public string token { get; set; }
}
Как вы можете видеть, name
не должно быть array
. Вместо nails
(массив или список).
Редактировать:
Для инициализации вашего Parameter
экземпляра вы можете сделать это следующим образом:
Parameter json = new Parameter
{
arch = new Arch
{
id = TrackingId
},
nails = new List<Nail>
{
new Nail { name = "John" }
},
token = "randomstuff"
};
Комментарии:
1. Это выглядит хорошо! Итак, как этот список гвоздей должен быть заполнен в параметре init?