【问题标题】:json.net list serialization to JSON Arrayjson.net 列表序列化为 JSON 数组
【发布时间】:2016-08-20 12:04:36
【问题描述】:

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

我有以下课程:

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 实现这一目标?谢谢!

【问题讨论】:

  • 如果您希望 inputs 也成为 JSON 中的数组,请将其制作为列表或数组

标签: c# arrays json serialization json.net


【解决方案1】:

如果你希望你的输入是一个数组,你需要在你的对象中将它声明为一个数组:

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

【讨论】:

  • 太棒了!完美运行!在尝试了很长时间之后,我不知何故没有找到解决方案。但现在很明显。谢谢!
  • 你为什么使用列表?库不能处理数组吗?
  • 你可以使用数组。我想我使用 List 是因为这个词在 OP 问题中。
【解决方案2】:

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

Json2CSharpClass Converter

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    相关资源
    最近更新 更多