Я создал интерфейс PHP, который соединяется с базой данных, кодируя JSON в PHP и расшифровывая его на C# с использованием JSON .NET. Все работает до сих пор. У меня есть несколько классов, которые я использую, которые я все созданные для работы с JSON .NETC# JSON .NET deserialize с JsonObjects в другом объекте
{
"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"
}
}]
}
Проблема заключается в том, что объект Ингредиент всегда NULL, даже когда я сериализации сам объект.
Классы были построены очень упрощенно, используя свойства C# для хранения переменных. Обычные списки строк отлично зарекомендовали себя, например, инструкции.
Класс, который я пытаюсь проанализировать, это 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 содержит только три свойства, которые являются:
[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;
}
Тогда последний класс с именем Ингредиент (что означает то же самое на английском языке)
[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;
}
Я попытался воспроизвести вашу проблему в Linqpad, импортируя ваш класс Ingredient и делая JsonConvert.DeserializeObject (json); где json - это строка, содержащая только ингредиент из вашего примера json, и все работает нормально, с атрибутами JsonProperty или без них (которые бесполезны). Я думаю, ваша проблема находится в другом месте –