2017-07-16 1 views
0

Ich habe versucht, das JSON-Format wie oben zu bilden, so bildete ich die Klasse wie unten. Während der Serialisierung gibt es keine erwartete Form zurück, wie kann ich diese erreichen.Form das JSON-Objekt - Serialisierung C#

public class Test 
{ 
    public List<Field> fields; 
} 
public class Field 
{ 
    public string name { get; set; } 
    public string value { get; set; } 
} 

Antwort:

"fields": [{ 
       "name": "SMS", 
       "value": "Yes" 
      }, { 
       "name": "Email", 
       "value": "" 
      },{ 
       "name": "Total", 
       "value": "" 
      }] 
+0

Sind Sie Gegensatz zur Verwendung von http: //www.newtonsoft .com/json? –

+0

kann ich nicht ganz klar verstehen. Willst du das sagen - du hattest eine Eingabezeichenfolge -> serialisiert für ein Array von Objekten über JSON.Net -> was bei der Deserialisierung nicht die ursprüngliche Zeichenfolge zurückgibt. Ist es? – RBT

Antwort

1

Sie können das resultierende JSON-Objekt mit anonymen Typen und LINQ anpassen. Bitte versuchen Sie diesen Code:

var test = new Test {fields = new List<Field>()}; 
test.fields.Add(new Field {name = "f1", value = "v1"}); 
test.fields.Add(new Field {name = "f2", value = "v2"}); 

var json = JObject.FromObject(new { fields = test.fields.Select(f => new {field = f}).ToArray() }) 
    .ToString(); 

A json variabel sein würde:

{ 
    "fields": [ 
    { 
     "field": { 
     "name": "f1", 
     "value": "v1" 
     } 
    }, 
    { 
     "field": { 
     "name": "f2", 
     "value": "v2" 
     } 
    } 
    ] 
} 
+0

Dies ist die unlesbarste und ineffizienteste Art, diese Aufgabe zu erledigen ... – Gusman

3

Verwenden Sie diese Website http://json2csharp.com und generieren alle Klassen automatisch. Kopieren Sie einfach Ihren JSON dort.

0

Sie haben soeben eine Klassenstufe verpaßt:

public class Test 
{ 
    public List<FieldHolder> fields; 
} 

public class FieldHolder 
{ 
    public Field field { get; set; } 
} 

public class Field 
{ 
    public string name { get; set; } 
    public string value { get; set; } 
}