欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【C#】Newtonsoft.Json 中 JArray 添加数组报错:Could not determine JSON object type for type 'xxx'

程序员文章站 2022-03-12 19:44:35
有时我们临时需要一个 JSON 字符串,直接拼接肯定不是好方法,但又懒得去定义一个类,这是用 就会非常的方便。 但是在 中添加数组却经常被坑。 输出结果: 非常正确,但如果把 换成 就不对了。 这么写会报: Could not determine JSON object type for type ......

有时我们临时需要一个 json 字符串,直接拼接肯定不是好方法,但又懒得去定义一个类,这是用 jobject 就会非常的方便。

但是在 jobject 中添加数组却经常被坑。

list<string> names = new list<string>
{
    "tom",
    "jerry"
};

jarray array = new jarray(names);

jobject obj = new jobject()
{
    { "names", array }
};

console.writeline(obj);

输出结果:

{
  "names": [
    "tom",
    "jerry"
  ]
}

非常正确,但如果把 list<string> 换成 list<class> 就不对了。

public class person
{
    public int id { get; set; }

    public string name { get; set; }
}

list<person> persons = new list<person>
{
    new person{ id = 1, name = "tom" },
    new person{ id = 2, name = "jerry" }
};

jarray array = new jarray(persons);

jobject obj = new jobject()
{
    { "names", array }
};

console.writeline(obj);

这么写会报:could not determine json object type for type 'xxx'

这是由于自定义类不属于基本类型所致。这是就只能用 jarray.fromobject

jobject obj = new jobject()
{
    { "persons", jarray.fromobject(persons) }
};

序列化结果就正确了。

{
  "names": [
    {
      "id": 1,
      "name": "tom"
    },
    {
      "id": 2,
      "name": "jerry"
    }
  ]
}