2017-02-28 2 views
-1

Ich versuche das folgende seltsam geformte JSON-Objekt in die Klasse zu deserialisieren, die viel mehr Sinn macht.Deserialisieren eines seltsam geformten JSON-Objekts mit Json.NET

{ 
    "item": { 
     "article_title": { 
      "type": "text", 
      "value": "Title of article 1" 
     }, 
     "content": { 
      "type": "text", 
      "value": "Article 1 content" 
     }, 
     "related_articles": { 
      "type": "related", 
      "value": [ 
       "article2" 
      ] 
     } 
    }, 
    "additional_items": { 
     "article2": { 
      "article_title": { 
       "type": "text", 
       "value": "Title of article 2" 
      }, 
      "content": { 
       "type": "text", 
       "value": "Article 2 content" 
      }, 
      "related_articles": { 
       "type": "related", 
       "value": [] 
      } 
     } 
    } 
} 

deserialize in die folgende Klasse Article

public class Article { 
    public string ArticleTitle; 
    public string Content; 
    public List<Article> RelatedArticles; 
} 

Die JSON hat zwei Eigenschaften in seinem Wurzelobjekt. Item ist der aktuelle Artikel und additional_items Eigenschaft enthält alle anderen Elemente, die in related_articles Eigenschaft verwiesen werden.

Ich konnte eine funktionierende Lösung basierend auf JsonConverter-Lösung Parse json with different types value (Newtonsoft.Json), aber das ist eigentlich nicht was ich brauche. Ich habe viele JSON-Antworten ähnlich wie diese, und ich möchte nicht für jeden von ihnen einen Konverter schreiben. Was ich brauche, ist etwas, das in der Lage ist, den Wert anhand des Namens der Eigenschaft aufzulösen (z. B. <class-name>.<property-name>).

+0

Sie benötigen möglicherweise einen benutzerdefinierten Konverter. – user3682091

+0

http://json2csharp.com –

Antwort

0

Verwenden Sie SelectToken und dann ToObject direkt verwenden.

var article = JObject.Parse(json).SelectToken("item").ToObject<List<Article>>(); 

deserialisieren Sie so etwas wie dieses

List<string[]> data = JsonConvert.DeserializeObject<List<string[]>>(jsonString); 
+0

Das löst mein Problem nicht. –

+1

Sie versuchen gerade, JSON in eine Liste zu deserialisieren? Sobald dies erledigt ist, können Sie durch das Auslesen der benötigten Informationen navigieren. – Aaron

0

ich es nur "key":"value" Eigenschaften enthält, die durch die Umwandlung in eine neue JObject gelöst habe tun können, die

von newtonsoft.json analysiert werden könnte leicht
JObject fields = new JObject(); 
foreach (var property in ((JObject)response.SelectToken("$.item.elements")).Properties()) 
{ 
    // Remove underscore characters to support loading into PascalCase property names in CSharp code 
    string propertyName = property.Name.Replace("_", ""); 
    fields.Add(propertyName, property.First["value"]); 
} 

return fields.ToObject<T>(); 
Verwandte Themen