2016-04-26 69 views
0

我使用json.net将对象序列化为json字符串。现在我有一个我想要序列化成Json数组的对象列表。但是,我无法用json.net来做到这一点,并希望有人能指出我的错误。json.net列表序列化为JSON数组

我有以下类别:

class PeopleList { 
    public Person inputs { get; set; } 
} 

class Person { 
    public String name { get; set; } 
    public int age { get; set; } 
} 

我使用下面的代码序列化对象:

var json = new List<PeopleList>(); 
Person p1 = new Person { name = "Name 1", age = 20 }; 
json.Add(new PeopleList { inputs = p1 }); 
Person p2 = new Person { name = "Name 2", age = 30 }; 
json.Add(new PeopleList { inputs = p2 }); 


     string jsonString = JsonConvert.SerializeObject(json, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, Formatting = Formatting.Indented }); 

这给了我下面的输出:

[ 
    { 
    "inputs": { 
     "name": "Name 1", 
     "age": 20 
    } 
    }, 
    { 
    "inputs": { 
     "name": "Name 2", 
     "age": 30 
    } 
    } 
] 

这是我真正想要的:

[ 
    { 
    "inputs": [ 
     { 
     "name": "Name 1", 
     "age": 20 
     } 
    ] 
    }, 
    { 
    "inputs": [ 
     { 
     "name": "Name 2", 
     "age": 30 
     } 
    ] 
    } 
] 

正如你所看到的,我需要列表中的每个对象都用[]封装。我如何用Json.net实现这一目标?谢谢!

+0

如果您希望它成为JSON中的数组,请将'inputs'放入列表或数组中 –

回答

2

如果你希望你的投入是一个数组,你需要将其申报为你的对象数组:

class PeopleList { 
    public List<Person> inputs { get; set; } 
} 

然后你可以使用它:

var json = new List<PeopleList>(); 
List<Person> p1 = new List<Person> { new Person { name = "Name 1", age = 20 } }; 
json.Add(new PeopleList { inputs = p1 }); 
List<Person> p2 = new List<Person> { new Person { name = "Name 2", age = 30 } }; 
json.Add(new PeopleList { inputs = p2 }); 

string jsonString = JsonConvert.SerializeObject(json, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, Formatting = Formatting.Indented }); 
+0

太棒了!完美的作品!我尝试了很长一段时间后才发现解决方案。但现在很明显。谢谢! – thunder

-1

根据你的输出你想要什么,你可能想要做这样的事情

Json2CSharpClass Converter

public class Person 
{ 
    public string name { get; set; } 
    public int age { get; set; } 
} 

public class PeopleList 
{ 
    public List<Person> inputs { get; set; } 
}