2016-11-23 7 views
-1

Ich erhalte eine JSon-Zeichenfolge von WS. Es ist so lang, dass ich Json2charp nicht verwenden kann, um es zu analysieren und die strukturierte Klasse zu erhalten.UWP - Von Json Zeichenfolge zu Struktur (Klassen)

Ich möchte die Zeichenfolge mit einem Befehl analysieren. Wie ist es möglich?

Ich weiß nicht, die Klassen so dass ich nicht einen Befehl wie verwenden kann:

Dim result = JsonConvert.DeserializeObject(Of MyClass.RootObject)(String_From_File) 

Ist es möglich, aus der Zeichenfolge ohne json2charp Website, die Klasse zu erhalten? Zum Beispiel, in vs.net, wenn auf die Variable 'string_from_file' ich 'Json Visualizer' wählen und alle Klassen und Daten im richtigen Modus sehen.

Wie kann ich dasselbe in meinem Code erhalten?

Ich habe Newtonsoft.json installiert

Antwort

0

Wenn Sie nicht die json Klasse Mapper wie NewtonSoft.Json verwenden können. Sie können die Windows.Data.Json API verwenden. Damit können Sie die gewünschten Daten aus Ihrer JSON-Zeichenfolge analysieren und extrahieren.

JsonValue jsonValue = JsonValue.Parse("{\"Width\": 800, \"Height\": 600, \"Title\": \"View from 15th Floor\", \"IDs\": [116, 943, 234, 38793]}"); 
double width = jsonValue.GetObject().GetNamedNumber("Width"); 
double height = jsonValue.GetObject().GetNamedNumber("Height"); 
string title = jsonValue.GetObject().GetNamedString("Title"); 
JsonArray ids = jsonValue.GetObject().GetNamedArray("IDs"); 

Sie können eine Probe in der Windows Universal Sample GitHub finden.

Eine komplexe Objektanalyse wird angezeigt here. Ich habe die wichtigsten Teile hier extrahiert. Die JSON-Zeichenfolge wird dem User -Konstruktor bereitgestellt, der die benötigten Komponenten extrahiert und dann die Analyse an den verschachtelten School-Konstruktor delegiert.

{ 
    "id": "1146217767", 
    "phone": null, 
    "name": "Satya Nadella", 
    "education": [ 
    { 
     "school": { 
     "id": "204165836287254", 
     "name": "Contoso High School" 
     }, 
     "type": "High School" 
    }, 
    { 
     "school": { 
     "id": "116138758396662", 
     "name": "Contoso University" 
     }, 
     "type": "College" 
    } 
    ], 
    "timezone": -8, 
    "verified": true 
} 

Dieses JSON-Fragment wird mit diesem Code analysiert:

public User(string jsonString) : this() 
    { 
     JsonObject jsonObject = JsonObject.Parse(jsonString); 
     Id = jsonObject.GetNamedString(idKey, ""); 

     IJsonValue phoneJsonValue = jsonObject.GetNamedValue(phoneKey); 
     if (phoneJsonValue.ValueType == JsonValueType.Null) 
     { 
      Phone = null; 
     } 
     else 
     { 
      Phone = phoneJsonValue.GetString(); 
     } 

     Name = jsonObject.GetNamedString(nameKey, ""); 
     Timezone = jsonObject.GetNamedNumber(timezoneKey, 0); 
     Verified = jsonObject.GetNamedBoolean(verifiedKey, false); 

     foreach (IJsonValue jsonValue in jsonObject.GetNamedArray(educationKey, new JsonArray())) 
     { 
      if (jsonValue.ValueType == JsonValueType.Object) 
      { 
       Education.Add(new School(jsonValue.GetObject())); 
      } 
     } 
    } 

    public School(JsonObject jsonObject) 
    { 
     JsonObject schoolObject = jsonObject.GetNamedObject(schoolKey, null); 
     if (schoolObject != null) 
     { 
      Id = schoolObject.GetNamedString(idKey, ""); 
      Name = schoolObject.GetNamedString(nameKey, ""); 
     } 
     Type = jsonObject.GetNamedString(typeKey); 
    } 

Wenn Sie die automatische Zuordnung von NewtonSoft.Json verwenden können, haben Sie keine andere Möglichkeit haben, als es selbst zu tun.

-1

Ist nicht so einfach. Die Json ich erhielt ist sehr kompliziert und haben viele Klasse So kann ich nicht verwenden
double width = jsonValue.GetObject(). GetNamedNumber ("Breite");

Inside class i have more ...