我创建了一个连接到数据库的PHP接口,通过在PHP中编码JSON并使用JSON .NET在C#上解码它。 到目前为止,一切都运行良好。 我有一些我使用的类,我创建它们用于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,即使我自己序列化了对象。
这些类的构建非常简单,使用C#属性来存储变量。 正常的字符串列表以前工作正常,例如Instructies。
我正在尝试解析的类是Recept,我喜欢这样: Recept 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类只包含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;
}
然后有最后一个名为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;
}
答案 0 :(得分:0)
您无需使用这些属性修饰c#类。你发布的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; }
}
答案 1 :(得分:0)
在看到JSON网站的输出后,我已经弄明白了。 我的Benodigdheden阵列被命名为Benodigdheden,而阵列中有Benodigdheid类型的物品。 在将数组重命名为benodigdheid和JSON之后,它仍然有效! 谢谢Felipe Oriani