У меня проблема десериализации json-объекта, потому что она не состоит из массива.
Образец строки json:
{
"Data": {
"A1": {
"name": "",
"code": "",
"type": ""
},
"A2": {
"name": "",
"code": "",
"type": ""
},
"A3": {
"name": "",
"code": "",
"type": ""
}
}
}
И вот мой код, строка json будет считана из файла и не может быть изменена.
var json = "{\"Data\":{\"A1\":{\"name\":\"\",\"code\":\"\",\"type\":\"\"},\"A2\":{\"name\":\"\",\"code\":\"\",\"type\":\"\"},\"A3\":{\"name\":\"\",\"code\":\"\",\"type\":\"\"}}}";
var jobject = JsonConvert.DeserializeObject<DataContainer>(json);
public class Data
{
public string name { get; set; }
public string code { get; set; }
public string type { get; set; }
}
public class DataContainer
{
public List<Data> Data { get; set; }
}
Единственный способ, которым я это сделал, - это изменить json, чтобы использовать массив, подобный приведенному ниже примеру, но я бы хотел решить это без необходимости изменять формат json файла.
{
"Data": [
{
"name": "",
"code": "",
"type": ""
},
{
"name": "",
"code": "",
"type": ""
},
{
"name": "",
"code": "",
"type": ""
}
]
}
благодаря
ваш json содержит объект Data, который содержит три разных объекта: A1, A2, A3.
Поэтому я думаю, вам нужно реализовать три разных класса, а контейнер
public class A1
{
public string name { get; set; }
public string code { get; set; }
public string type { get; set; }
}
public class A2
{
public string name { get; set; }
public string code { get; set; }
public string type { get; set; }
}
public class A3
{
public string name { get; set; }
public string code { get; set; }
public string type { get; set; }
}
public class Data
{
public A1 A1 { get; set; }
public A2 A2 { get; set; }
public A3 A3 { get; set; }
}
Если вы хотите использовать исходный формат данных JSON, измените определение класса DataContainer
на использование Dictionary<string, Data>
вместо List<Data>
:
public class DataContainer
{
public Dictionary<string, Data> Data { get; set; }
}
Я создал 2 класса и вручную десериализую объект json следующим образом:
class Program
{
static void Main(string[] args)
{
var json = "{\"Data\":{\"A1\":{\"name\":\"\",\"code\":\"\",\"type\":\"\"},\"A2\":{\"name\":\"\",\"code\":\"\",\"type\":\"\"},\"A3\":{\"name\":\"\",\"code\":\"\",\"type\":\"\"}}}";
var data = (JsonConvert.DeserializeObject(json) as Newtonsoft.Json.Linq.JObject).First.First;
List<DataItem> list = new List<DataItem>();
foreach (var item in data.ToList())
{
list.Add(new DataItem()
{
Name = ((Newtonsoft.Json.Linq.JProperty)(item)).Name,
A = JsonConvert.DeserializeObject<A>(item.First.ToString())
});
}
}
class DataItem
{
public string Name { get; set; } //A1, A2, A3 ....
public A A { get; set; }
}
class A
{
public string name { get; set; }
public string code { get; set; }
public string type { get; set; }
}
}
надеюсь, это поможет вам.