C#:反序列化 JSON 列表
C#: Deserialize JSON List
嗨:我在反序列化方面遇到问题 Json:
这是我的 Json(String):
{[
{
"IdGuid": "fac5d174-17d4-4330-a65e-07133e88e0ca",
"Nombre": "Asignaturas",
"Subtitulo": "Subtitulo de asignaturas",
"Descripcion": "Descripcion de asignaturas",
"urlFoto": "egio1.jpg"
},
[
{
"IdGuid": "a9a59e49-c318-4868-93a9-57347b4c4cad",
"Nombre": "Ciencias Naturales",
"Subtitulo": "",
"Descripcion": "Ciencias",
"urlFoto": "80.jpg"
},
{
"IdGuid": "8ae0dc90-aa6a-4457-8e64-5f591f75416c",
"Nombre": "Documentos",
"Subtitulo": "",
"Descripcion": "",
"urlFoto": "asd.jpg"
},
{
"IdGuid": "2ffbe004-316d-4a82-b4fe-0c43169766ad",
"Nombre": "Inglés",
"Subtitulo": "",
"Descripcion": "",
"urlFoto": "http://pue.jpg"
},
{
"IdGuid": "62151f5c-f503-48a6-9801-c27e92aa240a",
"Nombre": "Matemática",
"Subtitulo": "",
"Descripcion": "",
"urlFoto": "http://pue.jpg"
}
]
]}
这是我的 class:
public class Asignatura
{
public String idGuid { get; set; }
public String nombre { get; set; }
public String subtitulo { get; set; }
public String descripcion { get; set; }
public String urlFoto { get; set; }
}
而且我需要生成一个带有 de JSON 的 Asignaturas 列表。我正在尝试
List<Asignatura> listaAsignaturas = new List<Asignatura>();
listaAsignaturas= JsonConvert.DeserializeObject<List<Asignatura>>(json);
但不起作用。
- 请帮我解决这个问题。
- 我正在使用 Newtonsoft.Json
(编辑)
添加 Class:
public class rootAsignatura
{
public Asignatura raiz;
public List<Asignatura> listaAsignaturas;
}
正在尝试:
rootAsignatura listaAsignaturas = new rootAsignatura();
listaAsignaturas = JsonConvert.DeserializeObject<rootAsignatura>(json);
这继续没有工作。
您的 JSON 字符串有 2 个数组,一个数组有一个 "Asignatura",另一个 "Asignatura" 嵌套数组。删除第二组“[]”括号。
首先,我会联系网络服务的所有者并告诉他们他们提供的服务无效 JSON。
当前存在的外部 {...}
表示它们正在为一个对象提供服务,但该对象没有键和值(这是必需的),它只是包装了一个数组。
无论如何,您可以通过删除字符串开头和结尾的 {
和 }
来解决这个问题。然后你剩下一个数组,它的第一项是 Asignatura
,第二项是 Asignatura
s.
的数组
如果您只想要一个 List<Asignatura>
,最简单的方法可能是反序列化为 JArray
,然后解析各个元素:
/* Parse the underlying array after removing the opening and closing braces */
var array = JArray.Parse(json.Trim('{', '}'));
/* Deserialize the first item in the array */
var signatureOne = array[0].ToObject<Asignatura>();
/* Deserialize the second item in the array as a List<Asignatura> */
List<Asignatura> signatureList = array[1].ToObject<List<Asignatura>>();
/* Add the first item to the array. You could also use Insert(0, signatureOne) to
* put it at the front. */
signatureList.Add(signatureOne);
嗨:我在反序列化方面遇到问题 Json: 这是我的 Json(String):
{[
{
"IdGuid": "fac5d174-17d4-4330-a65e-07133e88e0ca",
"Nombre": "Asignaturas",
"Subtitulo": "Subtitulo de asignaturas",
"Descripcion": "Descripcion de asignaturas",
"urlFoto": "egio1.jpg"
},
[
{
"IdGuid": "a9a59e49-c318-4868-93a9-57347b4c4cad",
"Nombre": "Ciencias Naturales",
"Subtitulo": "",
"Descripcion": "Ciencias",
"urlFoto": "80.jpg"
},
{
"IdGuid": "8ae0dc90-aa6a-4457-8e64-5f591f75416c",
"Nombre": "Documentos",
"Subtitulo": "",
"Descripcion": "",
"urlFoto": "asd.jpg"
},
{
"IdGuid": "2ffbe004-316d-4a82-b4fe-0c43169766ad",
"Nombre": "Inglés",
"Subtitulo": "",
"Descripcion": "",
"urlFoto": "http://pue.jpg"
},
{
"IdGuid": "62151f5c-f503-48a6-9801-c27e92aa240a",
"Nombre": "Matemática",
"Subtitulo": "",
"Descripcion": "",
"urlFoto": "http://pue.jpg"
}
]
]}
这是我的 class:
public class Asignatura
{
public String idGuid { get; set; }
public String nombre { get; set; }
public String subtitulo { get; set; }
public String descripcion { get; set; }
public String urlFoto { get; set; }
}
而且我需要生成一个带有 de JSON 的 Asignaturas 列表。我正在尝试
List<Asignatura> listaAsignaturas = new List<Asignatura>();
listaAsignaturas= JsonConvert.DeserializeObject<List<Asignatura>>(json);
但不起作用。
- 请帮我解决这个问题。
- 我正在使用 Newtonsoft.Json
(编辑) 添加 Class:
public class rootAsignatura
{
public Asignatura raiz;
public List<Asignatura> listaAsignaturas;
}
正在尝试:
rootAsignatura listaAsignaturas = new rootAsignatura();
listaAsignaturas = JsonConvert.DeserializeObject<rootAsignatura>(json);
这继续没有工作。
您的 JSON 字符串有 2 个数组,一个数组有一个 "Asignatura",另一个 "Asignatura" 嵌套数组。删除第二组“[]”括号。
首先,我会联系网络服务的所有者并告诉他们他们提供的服务无效 JSON。
当前存在的外部 {...}
表示它们正在为一个对象提供服务,但该对象没有键和值(这是必需的),它只是包装了一个数组。
无论如何,您可以通过删除字符串开头和结尾的 {
和 }
来解决这个问题。然后你剩下一个数组,它的第一项是 Asignatura
,第二项是 Asignatura
s.
如果您只想要一个 List<Asignatura>
,最简单的方法可能是反序列化为 JArray
,然后解析各个元素:
/* Parse the underlying array after removing the opening and closing braces */
var array = JArray.Parse(json.Trim('{', '}'));
/* Deserialize the first item in the array */
var signatureOne = array[0].ToObject<Asignatura>();
/* Deserialize the second item in the array as a List<Asignatura> */
List<Asignatura> signatureList = array[1].ToObject<List<Asignatura>>();
/* Add the first item to the array. You could also use Insert(0, signatureOne) to
* put it at the front. */
signatureList.Add(signatureOne);