2016-10-25 2 views
0

Ich muss: DeserializeObject - einige Änderungen vornehmen - SerializeObject Wenn meine Json haben mehrere Typen, z.C# Newtonsoft.Json Konvertieren Sie Typ

{ 
    "type": "test", 
    "currentStatus": "Active", 
    "id": "987", 
    "items": [ 
    { 
     "type": "test1", 
     "id": "123", 
     "name": "Segment Members", 
     "memberCount": "0", 
     "outputTerminals": [ 
     { 
      "type": "test2", 
      "id": "123", 
      "connectedId": "123", 
      "terminalType": "out" 
     } 
     ], 
     "position": { 
     "type": "Position", 
     "x": "46", 
     "y": "14" 
     }, 
     "isFinished": "true", 
     "isRecurring": "false", 
     "segmentId": "123" 
    }, 
    { 
     "type": "test5", 
     "id": "1390", 
     "name": "Yay! Clickers", 
     "memberCount": "2", 
     "position": { 
     "type": "Position", 
     "x": "330", 
     "y": "375" 
     }, 
     "waitFor": "2592000" 
    }, 
    { 
     "type": "test3", 
     "id": "1391", 
     "name": "test", 
     "memberCount": "73", 
     "outputTerminals": [ 
     { 
      "type": "test4", 
      "id": "123", 
      "connectedId": "123", 
      "connectedType": "CampaignWaitAction", 
      "terminalType": "yes" 
     }, 
     { 
      "type": "test4", 
      "id": "123", 
      "connectedId": "123", 
      "connectedType": "CampaignWaitAction", 
      "terminalType": "no" 
     } 
     ], 
     "position": { 
     "type": "Position", 
     "x": "123", 
     "y": "123" 
     }, 
     "testId": "123" 
    } 
    ] 
} 

Welchen Datentyp sollte ich für diesen Vorgang verwenden? dynamisch, Objekt, Jobject ...? oder vielleicht noch etwas?

+3

Probieren Sie es hilft und überrascht sein, weil Sie etwas heute gelernt! – Smartis

Antwort

3

Ich würde nur ein Objekt erstellen und es zu diesem Typ deseriblize. Viel einfacher als dynamisch. (Vorausgesetzt, es wird in dieser Struktur bleiben immer)

WAS zu TUN

Kopieren Sie Ihre Json:

`Edit` -> `Paste Special` -> `Paste JSON As CLASSES` 

Und Sie dorthin gehen! Sie haben den Typ, zu dem Sie deserialisieren möchten.

var deserializedJson = JsonConvert.DeserializeObject<YourNewObject>(jsonString); 

Hinweis: Wenn das Einfügen der json Klasse nicht funktioniert, stellen Sie sicher, dass Ihre json gilt: ClickHereToValidateJson

1

Sie können Klassen erstellen und serialisieren/deserialisieren json:

public class OutputTerminal 
    { 
     public string type { get; set; } 
     public string id { get; set; } 
     public string connectedId { get; set; } 
     public string terminalType { get; set; } 
     public string connectedType { get; set; } 
    } 

    public class Position 
    { 
     public string type { get; set; } 
     public string x { get; set; } 
     public string y { get; set; } 
    } 

    public class Item 
    { 
     public string type { get; set; } 
     public string id { get; set; } 
     public string name { get; set; } 
     public string memberCount { get; set; } 
     public IList<OutputTerminal> outputTerminals { get; set; } 
     public Position position { get; set; } 
     public string isFinished { get; set; } 
     public string isRecurring { get; set; } 
     public string segmentId { get; set; } 
     public string waitFor { get; set; } 
     public string testId { get; set; } 
    } 

    public class Root 
    { 
     public string type { get; set; } 
     public string currentStatus { get; set; } 
     public string id { get; set; } 
     public IList<Item> items { get; set; } 
    } 

Und dann:

string json = JsonConvert.SerializeObject(rootObject); 
Root root = JsonConvert.DeserializeObject<Root>(json); 

auch Sie können dynamische Typ ohne Klassen verwenden:

string json = JsonConvert.SerializeObject(dynamicObject); 
dynamic obj = JsonConvert.DeserializeObject(json); 
1
using Newtonsoft.Json;   
dynamic collection = new 
{ 
    MultipleType = //call function which returns json here 
}; 
//serialize 
var jsonSerializedFeed = JsonConvert.SerializeObject(MultipleType); 
//deserialize 
var jsonSerializedFeed = JsonConvert.DeserializeObject(MultipleType); 

Hoffe, dass es

Verwandte Themen