Napisano: 25 Jun 2017 14:45
Pravim Form Application u VS2012 C++.
Imam neke podatke u json fajlovima i treba da ih ucitam.
{
"id1": {
"key1": "val11",
"key2": [
"it11",
"it12"
]
},
"id2": {
"key1": "val21",
"key2": [
"it21"
]
}
}
Voleo bih da podacima mogu da pristupam na sledeci nacin:
//pseudokod
String^ key = "id1";
return root[key]->key1;
Naleteo sam na pojam 'deserijalizacija' i izgleda da je to najbolje uraditi.
JSON.Net na koji sam prvo naleteo nece da se instalira bez nove verzije NuGet-a a ona izgleda nece u VS2012.
Video sam da ima i ugradjenih klasa za ovo, poput DataContractJsonSerializer, i jednostavnije mi je da njih koristim.
Nemam iskustva sa ovim, pa moze neko da mi napise kako treba da izgleda kod?
Ono sto sam ja napisao i sta normalno nije ispravno:
ref class Element {
public:
String^ key1;
List<String^> key2;
};
[DataContract]
ref class Root {
public:
[DataMember]Dictionary<String^, Element^> objects;
};
//...
FileStream^ stream = File::OpenRead(file);
DataContractJsonSerializer^ ser = gcnew DataContractJsonSerializer(Root::typeid);
Root^ root = (Root^)ser->ReadObject(stream);
Dopuna: 25 Jun 2017 18:21
Mozda sam trebao da napomenem da JSON ne mora da bude bas tog formata (mada bi voleo da je tako).
Uspeo sam da deserijalizujem niz objekata
[
{
"id": "id1",
"key1": "val11",
"key2": [
"it11",
"it12"
]
},
{
"id": "id2": {
"key1": "val21",
"key2": [
"it21"
]
}
]
I onda imamo
[DataContract]
ref class Element {
public:
[DataMember] String^ id;
[DataMember] String^ key1;
[DataMember] List<String^>^ key2;
};
//...
DataContractJsonSerializer^ ser = gcnew DataContractJsonSerializer(List<Element^>::typeid);
List<Element^>^ list = (List<Element^>^)ser->ReadObject(stream);
Na zalost, sad ne mogu da radim list[key]->key1 vec bi morao da iterisem celu listu da nadjem neki kljuc, mada izgleda da moze i to da se sredi: https://stackoverflow.com/questions/7635969/list-t.....using-linq
|