在 C# 中按类别反序列化 JSON
Deserialize JSON by Categories in C#
我有一个 JSON 文件,其中的产品按类别排序。我正在尝试反序列化 JSON 所以我得到一个 List 这样我就可以轻松访问例如“收藏夹”中的产品。
我发现使用 JSON 时出现问题,因为我还需要类别名称,我现在将它们存储在产品本身中。我想要实现的是轻松地将所有产品存储在“收藏夹”或另一个中。
我这里的主要问题是我不确定哪种数据类型更适合存储此类信息。我的 JSON 是:
{
"Favoritos": [
{
"Categoria" : "CortePelo",
"Nombre" : "Corte Hombre",
"Precio" : "10,00",
"Color" : "57; 62; 65"
},
{
"Categoria" : "CortePelo",
"Nombre" : "Corte Mujer",
"Precio" : "100,00",
"Color" : "57; 62; 65"
}
],
"CortePelo": [
{
"Categoria" : "CortePelo",
"Nombre" : "Corte Hombre",
"Precio" : "10,00",
"Color" : "57; 62; 65"
},
{
"Categoria" : "CortePelo",
"Nombre" : "Corte Mujer",
"Precio" : "100,00",
"Color" : "57; 62; 65"
}
]
}
我的类是:
public class Productos
{
public List<List<Producto>> Categorias { get; set; }
}
public class Producto
{
public string Categoria { get; set; }
public string Nombre { get; set; }
public double Precio { get; set; }
public string Color { get; set; }
[JsonConstructor]
public Producto(string categoria, string nom, double prc, string color)
{
Categoria = categoria;
Nombre = nom;
Precio = prc;
Color = color;
}
}
我在反序列化中得到的结果为空:
string json = r.ReadToEnd();
Productos productos = JsonConvert.DeserializeObject<Productos>(json);
你得到的是空值,因为反序列化失败。但它没有抛出异常。
正确的类型是 Dictionary
如果你想检查你的反序列化是否正确,首先创建一个对象结构的序列化json对象。
您的 JSON 与 Productos
中定义的架构不匹配。不要使用 Productos
class,而是使用 Dictionary<string,Producto[]>
来更好地匹配 JSON.
像这样:
string json = r.ReadToEnd();
Dictionary<string,Producto[]> productosPorCategoria = JsonConvert.DeserializeObject<Dictionary<string,Producto[]>>(json);
注意:如果我弄错了变量名,我很抱歉,我用Google翻译了那个位。
如果您仍想强类型化属性而不是使用字典,则需要像这样更新 Productos
:
public class Productos
{
public List<Producto> Favoritos { get; set; }
public List<Producto> CortePelo { get; set; }
}
你好,你如何制作一个 Producto 列表并将它们序列化到 json,
检索后,您只需将 json 反序列化为一个列表,然后按类别对 Producto 列表进行分组,现在您可以使用 LINQ 访问按类别分组的产品列表列表。
{
[
{"Categoria" : "CortePelo",
"Nombre" : "Corte Hombre",
"Precio" : "10,00",
"Color" : "57; 62; 65"
},{
"Categoria" : "CortePelo",
"Nombre" : "Corte Mujer",
"Precio" : "100,00",
"Color" : "57; 62; 65"
},{
"Categoria" : "CortePelo",
"Nombre" : "Corte Hombre",
"Precio" : "10,00",
"Color" : "57; 62; 65"
},{
"Categoria" : "CortePelo",
"Nombre" : "Corte Mujer",
"Precio" : "100,00",
"Color" : "57; 62; 65"
}
]
}
此处将 json 反序列化为 Producto
的列表
string json = r.ReadToEnd();
List<Producto>productos = JsonConvert.DeserializeObject<List<Producto>>(json);
//Here you now group the list of Producto by Categoria
var groupedProductos=productos.GroupBy(x=>x.Categoria);
//To find Products with Categoria 'CortePelo'
var cortePeloGroup=groupedProductos.FirstOrDefault(x=>x.Key=="CortePelo");
//Now you convert the Grouped Producto of Categoria 'CortePelo' to List
List<Producto> cortePeloProductoList = cortePeloGroup.Select(g => g).ToList();
我有一个 JSON 文件,其中的产品按类别排序。我正在尝试反序列化 JSON 所以我得到一个 List 这样我就可以轻松访问例如“收藏夹”中的产品。
我发现使用 JSON 时出现问题,因为我还需要类别名称,我现在将它们存储在产品本身中。我想要实现的是轻松地将所有产品存储在“收藏夹”或另一个中。
我这里的主要问题是我不确定哪种数据类型更适合存储此类信息。我的 JSON 是:
{
"Favoritos": [
{
"Categoria" : "CortePelo",
"Nombre" : "Corte Hombre",
"Precio" : "10,00",
"Color" : "57; 62; 65"
},
{
"Categoria" : "CortePelo",
"Nombre" : "Corte Mujer",
"Precio" : "100,00",
"Color" : "57; 62; 65"
}
],
"CortePelo": [
{
"Categoria" : "CortePelo",
"Nombre" : "Corte Hombre",
"Precio" : "10,00",
"Color" : "57; 62; 65"
},
{
"Categoria" : "CortePelo",
"Nombre" : "Corte Mujer",
"Precio" : "100,00",
"Color" : "57; 62; 65"
}
]
}
我的类是:
public class Productos
{
public List<List<Producto>> Categorias { get; set; }
}
public class Producto
{
public string Categoria { get; set; }
public string Nombre { get; set; }
public double Precio { get; set; }
public string Color { get; set; }
[JsonConstructor]
public Producto(string categoria, string nom, double prc, string color)
{
Categoria = categoria;
Nombre = nom;
Precio = prc;
Color = color;
}
}
我在反序列化中得到的结果为空:
string json = r.ReadToEnd();
Productos productos = JsonConvert.DeserializeObject<Productos>(json);
你得到的是空值,因为反序列化失败。但它没有抛出异常。
正确的类型是 Dictionary
如果你想检查你的反序列化是否正确,首先创建一个对象结构的序列化json对象。
您的 JSON 与 Productos
中定义的架构不匹配。不要使用 Productos
class,而是使用 Dictionary<string,Producto[]>
来更好地匹配 JSON.
像这样:
string json = r.ReadToEnd();
Dictionary<string,Producto[]> productosPorCategoria = JsonConvert.DeserializeObject<Dictionary<string,Producto[]>>(json);
注意:如果我弄错了变量名,我很抱歉,我用Google翻译了那个位。
如果您仍想强类型化属性而不是使用字典,则需要像这样更新 Productos
:
public class Productos
{
public List<Producto> Favoritos { get; set; }
public List<Producto> CortePelo { get; set; }
}
你好,你如何制作一个 Producto 列表并将它们序列化到 json, 检索后,您只需将 json 反序列化为一个列表,然后按类别对 Producto 列表进行分组,现在您可以使用 LINQ 访问按类别分组的产品列表列表。
{
[
{"Categoria" : "CortePelo",
"Nombre" : "Corte Hombre",
"Precio" : "10,00",
"Color" : "57; 62; 65"
},{
"Categoria" : "CortePelo",
"Nombre" : "Corte Mujer",
"Precio" : "100,00",
"Color" : "57; 62; 65"
},{
"Categoria" : "CortePelo",
"Nombre" : "Corte Hombre",
"Precio" : "10,00",
"Color" : "57; 62; 65"
},{
"Categoria" : "CortePelo",
"Nombre" : "Corte Mujer",
"Precio" : "100,00",
"Color" : "57; 62; 65"
}
]
}
此处将 json 反序列化为 Producto
的列表string json = r.ReadToEnd();
List<Producto>productos = JsonConvert.DeserializeObject<List<Producto>>(json);
//Here you now group the list of Producto by Categoria
var groupedProductos=productos.GroupBy(x=>x.Categoria);
//To find Products with Categoria 'CortePelo'
var cortePeloGroup=groupedProductos.FirstOrDefault(x=>x.Key=="CortePelo");
//Now you convert the Grouped Producto of Categoria 'CortePelo' to List
List<Producto> cortePeloProductoList = cortePeloGroup.Select(g => g).ToList();