Diskuze: Json Deserializace ze stringu?
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, je to opravdu jednoduché, vytvoříš si třídu, která přesně opisuje strukturu tvého JSON objektu a potom jen zavoláš jednu metodu, kde zadáš tu tvou třídu.
Napíšu ti příklad ...
Takže například pro JSON:
{
"boolean": true,
"number": 123,
"object": {
"a": "b",
"c": "d",
"e": "f"
},
"string": "Hello World"
}
//
class Program
{
static void Main(string[] args)
{
var json = @"{""boolean"":true,""number"":123,""obj"":{ ""a"":""b"",""c"":""d"",""e"":""f""},""str"":""Hello World""}";
Deserialized d_json = JsonConvert.DeserializeObject<Deserialized>(json);
// d_json objekt nyní obsahuje data naplněná z json stringu
}
}
class Deserialized
{
public bool boolean;
public int number;
public Dictionary<string, string> obj;
public string str;
}
S čím ti ale bohužel nepomůžu tak je název s mezerou v životě by mě nenapadlo při tvoření JSONu, tak nějaký objekt pojmenovat, právě z tohodle důvodu, že to pro někoho akorát bude drbačka jak na to.
Ahoj, hned to skusim. Velice děkuji a mimochodem,jak jsem tak vycetl na netu, tak takhhle se zase dela nazev s mezerou
[JsonProperty("1. symbol")]
public string symbol {get; set}
Skus pouzit JsonPropertyAttribute nad danou property.
Jo tak to vypadá easy, snad to bude fungovat i na deserializaci ale
Deserialized d_json = JsonConvert.DeserializeObject<Deserialized>(getDataFromWeb.Json);
Console.WriteLine(d_json.StockQuotes["2. price"]);
Console.ReadKey();
}
}
public class Deserialized
{
[JsonProperty("Meta Data")]
public Dictionary<string, string> MetaData;
[JsonProperty("Stock Quotes")]
public Dictionary<string, string> StockQuotes;
}
Newtonsoft.Json.JsonSerializationException: 'Cannot deserialize the
current JSON array (e.g. [1,2,3]) into type
'System.Collections.Generic.Dictionary`2[System.String,System.String]'
because the type requires a JSON object (e.g. {"name":"value"}) to deserialize
correctly.
Zrovna super to nefunguje .
Co psala Elisse slo super
Máš špatně datové typy.
"Stock Quotes" není string, string dictionary, ale je to pole Podívej pořádně na ten JSON.
Dokonce ti to i píše, že to nemůže deserializovat pole na dictionary:
Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'System.Collections.Generic.Dictionary
A jaký bude kód, pokud nevíme, jaký název očekávat? Nelze tedy podle toho vytvořit třídu, která kopíruje ten json. Právě takový problém řeším, tak by mi to pomohlo. Díky
Použij typ dynamic... Práce s ním je potom v lecčem podobná Dictionary.
Zobrazeno 10 zpráv z 10.