C# JSON .NET 在另一个对象中使用 JsonObjects 反序列化
C# JSON .NET deserialize with JsonObjects in another object
我创建了一个连接到数据库的 PHP 接口,方法是在 PHP 中编码 JSON 并使用 JSON .NET 在 C# 上对其进行解码。
到目前为止一切正常。
我有一些我使用的 classes,我创建它们都是为了与 JSON .NET
一起使用
{
"ReceptId": "1",
"Naam": "Rijst met ragout",
"GramPerPersoon": "280",
"Type": "Eten",
"Instructies": [
"Maak rijst warm",
"Doe ragout op de rijst"
],
"Benodigdheden": [{
"Hoeveelheid": "70",
"Eenheid": "gram",
"Ingredient": {
"Ingredient_id": "1",
"Naam": "Rijst",
"Beschrijving": "Rijst behoort zoals alle granen tot de grassenfamilie. Rijst is het belangrijkste voedsel voor een groot deel van de wereldbevolking, vooral in de warmere streken.",
"Energie": "355",
"Vetten": "0.5",
"VerzadigdeVetten": "0.2",
"KoolHydraten": "79",
"Eiwitten": "7.5"
}
}, {
"Hoeveelheid": "30",
"Eenheid": "gram",
"Ingredient": {
"Ingredient_id": "2",
"Naam": "Ragout",
"Beschrijving": "Ragout (Nederlands-Nederlands) of vol-au-vent (Vlaams) is van oorsprong een gerecht dat bestaat uit stukjes gesneden vlees, gevogelte of vis in saus.",
"Energie": "98",
"Vetten": "5.5",
"VerzadigdeVetten": "2.2",
"KoolHydraten": "3.8",
"Eiwitten": "8.3"
}
}]
}
问题是 Ingredient 对象始终为 NULL,即使我序列化对象本身也是如此。
classes 的构建非常简单,使用 C# 属性来存储变量。
正常的字符串列表以前工作正常,例如 Instructies。
我试图解析的 class 是 Recept,我喜欢这样:
接受接受 = JsonConvert.DeserializeObject(json);
JSON 是 JSON 输入,您可以在上面查看。
Recept 包含一些属性,除了 Benodigdheden 之外都可以正常工作。
[JsonProperty]
public List<Benodigdheid> Benodigdheden
{
get;
private set;
}
[JsonProperty]
public List<string> Instructies
{
get;
private set;
}
[JsonProperty]
public int ReceptId
{
get;
private set;
}
[JsonProperty]
public string Naam
{
get;
private set;
}
[JsonProperty]
public ReceptType Type
{
get;
private set;
}
[JsonProperty]
public int GramPerPersoon
{
get;
private set;
}
public Recept(int id, string naam, ReceptType receptType, int gramPP, List<string> instructies, List<Benodigdheid> benodigdheden)
{
this.ReceptId = id;
this.Naam = naam;
this.Type = receptType;
this.GramPerPersoon = gramPP;
this.Instructies = instructies;
getBenodigdHeden();
}
Benodigdheid class 仅包含 3 个属性,它们是:
[JsonProperty]
public Ingredient Ingredient
{
get;
private set;
}
[JsonProperty]
public int Hoeveelheid
{
get;
private set;
}
[JsonProperty]
public string Eenheid
{
get;
private set;
}
public Benodigdheid(Ingredient ingredient, int hoeveelheid, string eenheid)
{
this.Ingredient = ingredient;
this.Hoeveelheid = hoeveelheid;
this.Eenheid = eenheid;
}
然后就是最后一个class的Ingredient(英文意思一样)
[JsonProperty]
public int Ingredient_id
{
get;
private set;
}
[JsonProperty]
public string Naam
{
get;
private set;
}
[JsonProperty]
public string Beschrijving
{
get;
private set;
}
[JsonProperty]
public float Energie
{
get;
private set;
}
[JsonProperty]
public float Vetten
{
get;
private set;
}
[JsonProperty]
public float VerzadigdeVetten{
get;
private set;
}
[JsonProperty]
public float KoolHydraten
{
get;
private set;
}
[JsonProperty]
public float Eiwitten
{
get;
private set;
}
public Ingredient(int id, string naam, string beschrijving, float energie, float vetten, float verzadigde_vetten, float koolhydraten, float eiwitten) {
this.Ingredient_id = id;
this.Naam = naam;
this.Beschrijving = beschrijving;
this.Energie = energie;
this.Vetten = vetten;
this.VerzadigdeVetten = verzadigde_vetten;
this.KoolHydraten = koolhydraten;
this.Eiwitten = eiwitten;
}
您不需要用这些属性修饰您的 c# class。从您发布的 json 和 http://json2csharp.com/
,我生成了论文 classe,我认为这足以让您反序列化您的 json 数据。
public class Ingredient
{
public string Ingredient_id { get; set; }
public string Naam { get; set; }
public string Beschrijving { get; set; }
public string Energie { get; set; }
public string Vetten { get; set; }
public string VerzadigdeVetten { get; set; }
public string KoolHydraten { get; set; }
public string Eiwitten { get; set; }
}
public class Benodigdheden
{
public string Hoeveelheid { get; set; }
public string Eenheid { get; set; }
public Ingredient Ingredient { get; set; }
}
public class RootObject
{
public string ReceptId { get; set; }
public string Naam { get; set; }
public string GramPerPersoon { get; set; }
public string Type { get; set; }
public List<string> Instructies { get; set; }
public List<Benodigdheden> Benodigdheden { get; set; }
}
看到 JSON 网站的输出后,我明白了。
我的 Benodigdheden 阵列被命名为 Benodigdheden,而阵列中有 Benodigdheid 类型的项目。
在将 Array 重命名为 benodigdheid 和 JSON 之后,它成功了!
谢谢 Felipe Oriani
我创建了一个连接到数据库的 PHP 接口,方法是在 PHP 中编码 JSON 并使用 JSON .NET 在 C# 上对其进行解码。 到目前为止一切正常。 我有一些我使用的 classes,我创建它们都是为了与 JSON .NET
一起使用{
"ReceptId": "1",
"Naam": "Rijst met ragout",
"GramPerPersoon": "280",
"Type": "Eten",
"Instructies": [
"Maak rijst warm",
"Doe ragout op de rijst"
],
"Benodigdheden": [{
"Hoeveelheid": "70",
"Eenheid": "gram",
"Ingredient": {
"Ingredient_id": "1",
"Naam": "Rijst",
"Beschrijving": "Rijst behoort zoals alle granen tot de grassenfamilie. Rijst is het belangrijkste voedsel voor een groot deel van de wereldbevolking, vooral in de warmere streken.",
"Energie": "355",
"Vetten": "0.5",
"VerzadigdeVetten": "0.2",
"KoolHydraten": "79",
"Eiwitten": "7.5"
}
}, {
"Hoeveelheid": "30",
"Eenheid": "gram",
"Ingredient": {
"Ingredient_id": "2",
"Naam": "Ragout",
"Beschrijving": "Ragout (Nederlands-Nederlands) of vol-au-vent (Vlaams) is van oorsprong een gerecht dat bestaat uit stukjes gesneden vlees, gevogelte of vis in saus.",
"Energie": "98",
"Vetten": "5.5",
"VerzadigdeVetten": "2.2",
"KoolHydraten": "3.8",
"Eiwitten": "8.3"
}
}]
}
问题是 Ingredient 对象始终为 NULL,即使我序列化对象本身也是如此。
classes 的构建非常简单,使用 C# 属性来存储变量。 正常的字符串列表以前工作正常,例如 Instructies。
我试图解析的 class 是 Recept,我喜欢这样: 接受接受 = JsonConvert.DeserializeObject(json); JSON 是 JSON 输入,您可以在上面查看。
Recept 包含一些属性,除了 Benodigdheden 之外都可以正常工作。
[JsonProperty]
public List<Benodigdheid> Benodigdheden
{
get;
private set;
}
[JsonProperty]
public List<string> Instructies
{
get;
private set;
}
[JsonProperty]
public int ReceptId
{
get;
private set;
}
[JsonProperty]
public string Naam
{
get;
private set;
}
[JsonProperty]
public ReceptType Type
{
get;
private set;
}
[JsonProperty]
public int GramPerPersoon
{
get;
private set;
}
public Recept(int id, string naam, ReceptType receptType, int gramPP, List<string> instructies, List<Benodigdheid> benodigdheden)
{
this.ReceptId = id;
this.Naam = naam;
this.Type = receptType;
this.GramPerPersoon = gramPP;
this.Instructies = instructies;
getBenodigdHeden();
}
Benodigdheid class 仅包含 3 个属性,它们是:
[JsonProperty]
public Ingredient Ingredient
{
get;
private set;
}
[JsonProperty]
public int Hoeveelheid
{
get;
private set;
}
[JsonProperty]
public string Eenheid
{
get;
private set;
}
public Benodigdheid(Ingredient ingredient, int hoeveelheid, string eenheid)
{
this.Ingredient = ingredient;
this.Hoeveelheid = hoeveelheid;
this.Eenheid = eenheid;
}
然后就是最后一个class的Ingredient(英文意思一样)
[JsonProperty]
public int Ingredient_id
{
get;
private set;
}
[JsonProperty]
public string Naam
{
get;
private set;
}
[JsonProperty]
public string Beschrijving
{
get;
private set;
}
[JsonProperty]
public float Energie
{
get;
private set;
}
[JsonProperty]
public float Vetten
{
get;
private set;
}
[JsonProperty]
public float VerzadigdeVetten{
get;
private set;
}
[JsonProperty]
public float KoolHydraten
{
get;
private set;
}
[JsonProperty]
public float Eiwitten
{
get;
private set;
}
public Ingredient(int id, string naam, string beschrijving, float energie, float vetten, float verzadigde_vetten, float koolhydraten, float eiwitten) {
this.Ingredient_id = id;
this.Naam = naam;
this.Beschrijving = beschrijving;
this.Energie = energie;
this.Vetten = vetten;
this.VerzadigdeVetten = verzadigde_vetten;
this.KoolHydraten = koolhydraten;
this.Eiwitten = eiwitten;
}
您不需要用这些属性修饰您的 c# class。从您发布的 json 和 http://json2csharp.com/
,我生成了论文 classe,我认为这足以让您反序列化您的 json 数据。
public class Ingredient
{
public string Ingredient_id { get; set; }
public string Naam { get; set; }
public string Beschrijving { get; set; }
public string Energie { get; set; }
public string Vetten { get; set; }
public string VerzadigdeVetten { get; set; }
public string KoolHydraten { get; set; }
public string Eiwitten { get; set; }
}
public class Benodigdheden
{
public string Hoeveelheid { get; set; }
public string Eenheid { get; set; }
public Ingredient Ingredient { get; set; }
}
public class RootObject
{
public string ReceptId { get; set; }
public string Naam { get; set; }
public string GramPerPersoon { get; set; }
public string Type { get; set; }
public List<string> Instructies { get; set; }
public List<Benodigdheden> Benodigdheden { get; set; }
}
看到 JSON 网站的输出后,我明白了。 我的 Benodigdheden 阵列被命名为 Benodigdheden,而阵列中有 Benodigdheid 类型的项目。 在将 Array 重命名为 benodigdheid 和 JSON 之后,它成功了! 谢谢 Felipe Oriani