我有以下的JSON字符串作为我的问题的例子:反序列化列表<string>从JSON来列出<object>
{
"Code": "Admin",
"Groups":
[
"Administrator",
"Superuser",
"User"
]
}
而且我有一个名为用户使用如下代码类...
[JsonObject(MemberSerialization.OptIn)]
public class User
{
public User (string code)
{
this.Code = code;
}
[JsonProperty]
public string Code { get; set; }
[JsonProperty("Groups")]
private List<UserGroup> groups;
public List<UserGroup> Groups
{
if (groups == null)
groups = new List<UserGroup>();
return groups;
}
}
...和一个名为用户组类 - 在这个例子 - 只有这几行代码:
public class UserGroup
{
public UserGroup (string code)
{
this.Code = code;
// Some code to fill all the other properties, just by knowing the code.
}
public string Code { get; set; }
// More properties
}
现在,我想要的是,上面显示的JSON字符串将被反序列化为一个用户的实例,并且“Groups”数组中的所有字符串都应该反序列化为带有来自每个字符串的实例的List<UserGroup>
。 此外 - 另一种方式 - 应该将用户序列化为只包含UserGroups的Code属性的JSON字符串。
我通常不反序列化,但我创建一个用户的实例,并使用此代码填充它...
Newtonsoft.Json.JsonConvert.PopulateObject(jsonString, myUserInstance);
...但如果我用上面所示的JSON字符串运行代码的所有我得到的是以下情况例外:
Newtonsoft.Json.JsonSerializationException: 'Error converting value "Administrator" to type 'UserGroup'.
我最后的要求是,我想UserGroup
被序列化为一个字符串数组只有当我序列化User
。当我将一个UserGroup
独立作为一个根对象序列化时,它应该正常序列化(具有所有属性)。 (作为比较,在Json.Net: Serialize/Deserialize property as a value, not as an object中,对象在所有情况下都被串行化为一个字符串。)
两个选项。创建一个自定义JsonConverter,知道如何处理转换或向类中添加隐式运算符以知道如何从字符串转换 – Nkosi
是否必须创建从String到UserGroup的JsonConverter以及从字符串到列表的其他方式oder List ? 你是什么意思加入一个隐式运算符? –
只是好奇,为什么不使用这个? [JsonProperty(“Groups”)] public string [] Groups {get;组; } –