2016-06-01 3 views
0

serialisieren Ich habe eine Liste der Empfänger als Liste. Wie kann ich die C# -Objekte zu diesem spezifischen JSON-Format serialisieren, das von mailgun angefordert wird?Wie zu diesem spezifischen JSON-Format

C#

var recipients = new List<Recipient> 
    { 
     new Recipient("[email protected]", "Foo Bar 1", "1234"), 
     new Recipient("[email protected]", "Foo Bar 2", "9876"), 
     ... 
    } 

Erwartete JSON (Nach https://documentation.mailgun.com/user_manual.html#batch-sending)

{ 
    "[email protected]": { "name": "Foo Bar 1", "customerNumber": "1234" }, 
    "[email protected]": { "name": "Foo Bar 2", "customerNumber": "9876" }, 
} 

JsonObject Verwendung und die serializable Methode SimgpleJson.SerializeObject() Wille erzeugt JSON wie folgt aus:

{ 
    [ 
     {"[email protected]": { "name": "Foo Bar 1", "customerNumber": "1234" }}, 
     {"[email protected]": { "name": "Foo Bar 2", "customerNumber": "9876" }}, 
    ] 
} 
+1

Können Sie Ihren Code zeigen? (In solchen Fällen verwende ich einfach LINQ to JSON von JSON.NET: einfacher, ein bestimmtes Format zu erhalten als die Serialisierung). – Richard

+0

Sie haben ein Array anstelle mehrerer einzelner Objekte. Dies kann geändert werden, indem die Zeichenfolge serialisiert wird und die [und] -Deserialisierung wieder entfernt wird. es wird sehr wahrscheinlich eine bessere Lösung ohne Serialisierung sein – Mafii

Antwort

1

Ich denke, Sie können folgende Klasse verwenden, um das Objekt

serialisieren
public class Test1FooCom 
    { 
     public string name { get; set; } 
     public string customerNumber { get; set; } 
    } 


var obj = new Dictionary<string, Test1FooCom> 
    { 
    {"[email protected]", new Test1FooCom(){name="Foo Bar 1",customerNumber="1234"}}, 
    {"[email protected]", new Test1FooCom(){name="Foo Bar 2",customerNumber="9876"}},   
    }; 

    var json = JsonConvert.SerializeObject(obj); 

Ausgabe Json

{ 
    "[email protected]":{ 
     "name":"Foo Bar 1", 
     "customerNumber":"1234" 
    }, 
    "[email protected]":{ 
     "name":"Foo Bar 2", 
     "customerNumber":"9876" 
    } 
} 
0

Das tatsächliche Ergebnis ist korrekt. Eine Liste von Empfängern, die sofort in ein Array construct [] übersetzt wird, so dass alles in dieser Liste so angezeigt wird, wie Sie es auf Ihrer tatsächlichen Ausgabe haben.

Ihre Erwartung würde nicht funktionieren, da es wieder in ths deserialisieren würde:

public class Rootobject 
{ 
    public Test1FooCom test1foocom { get; set; } 
    public Test2FooCom test2foocom { get; set; } 
} 

public class Test1FooCom 
{ 
    public string name { get; set; } 
    public string customerNumber { get; set; } 
} 

public class Test2FooCom 
{ 
    public string name { get; set; } 
    public string customerNumber { get; set; } 
} 
+0

Sie haben Recht, aber ich denke, mailgun (wie er erwähnt) erfordert das andere Format – Mafii

1

Sie sollten Wörterbuch verwenden für erwartete JSON, wie folgt aus:

var recipients = new Dictionary<string, Recipient> 
    { 
     {"[email protected]", new Recipient("Foo Bar 1", "1234")}, 
     {"[email protected]", new Recipient("Foo Bar 2", "9876")}, 
     ... 
    } 

oder diese:

var recipients = new Dictionary<string, object> 
      { 
       {"[email protected]", new {name = "Foo Bar 1", customerNumber = "1234"}}, 
       {"[email protected]", new {name = "Foo Bar 2", customerNumber = "9876"}} 
      }; 

      Debug.WriteLine(recipients.ToJson()); 
Verwandte Themen