List<User> list = LoadUsers();
JObject json = new JObject();
json["users"] = new JValue(list);
似乎没有用?
错误:
Could not determine JSON object type for type System.Collections.Generic.List`1
答案 0 :(得分:51)
JValue
只能包含简单的值,如字符串,整数,布尔值,日期等。它不能包含复杂的对象。我怀疑你真正想要的是这个:
List<User> list = LoadUsers();
JObject json = new JObject();
json["users"] = JToken.FromObject(list);
以上内容会将User
个对象列表转换为代表用户的JArray
个JObjects
,然后将其分配给新{{1}上的users
属性}}。您可以通过检查JObject
的{{1}}属性来确认这一点,并确认它是Type
。
相反,如果您按照此问题的另一个答案(现已删除)中的建议json["users"]
,您可能无法获得所需的结果。该方法会将用户列表序列化为字符串,从中创建一个简单的Array
,然后将json["users"] = new JValue(JsonConvert.SerializeObject(list))
分配给JValue
上的JValue
属性。如果您检查users
的{{1}}属性,则会看到它是JObject
。这意味着,如果您稍后尝试使用Type
将json["users"]
转换为JSON,您将获得双序列化输出而不是您可能期望的JSON。
这是一个简短的演示来说明差异:
String
输出:
JObject
答案 1 :(得分:3)
我有这个问题,你现在可以使用JArray完成这项工作,如果你只是想要没有根名称的数组项。
var json = JArray.FromObject(LoadUsers());
如果您希望json数组的根名称为“users”,则可以使用
var json = new JObject { ["users"] = JToken.FromObject(LoadUsers()) };