2016-06-01 3 views
0

У меня есть список получателей в виде списка. Как я могу сериализировать объекты C# в этом конкретном формате JSON, запрошенном mailgun?Как сериализовать этот конкретный формат JSON

C#

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

Ожидаемое JSON (По 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 и сериализации метод SimgpleJson.SerializeObject() воли производит JSON как это:

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

Можете ли вы показать код? (В таких случаях я просто использую LINQ для JSON из JSON.NET: проще получить конкретный формат, чем использовать сериализацию). – Richard

+0

У вас есть массив вместо нескольких отдельных объектов. Это можно изменить путем сериализации строки, удаления [и] и десериализации снова. там, скорее всего, будет лучшее решение без сериализации tho – Mafii

ответ

1

Я думаю, вы можете использовать следующий класс для сериализации объекта

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); 

Выход Json

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

Фактический результат правильный. Список получателей, сразу же переведенных в конструкцию массива [], поэтому все, что находится внутри этого списка, будет отображаться так же, как и на вашем фактическом выходе.

Ваши ожидания не будет работать, так как она будет десериализации обратно в тыс:

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

Вы правы, но я думаю, что mailgun (как он упоминает) требует другого формата – Mafii

1

вы должны использовать словарь для ожидаемого JSON, например:

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

или это один:

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()); 
Смежные вопросы