这是我的儿子
{
"accessType":"Grant",
"spaces":[{"spaceId":"5c209ba0-e24d-450d-8f23-44a99e6ae415"}],
"privilegeId":"db7cd037-6503-4dbf-8566-2cca4787119d",
"privilegeName":"PERM_RVMC_DEV",
"privilegeDescription":"RVMC Dev",
"privilegeType":"Permission"
}这是我的课:
public class ProfilePrivilege
{
public AccessType AccessType { get; set; }
public Guid PrivilegeId { get; set; }
public string PrivilegeName { get; set; }
public string PrivilegeDescription { get; set; }
public PrivilegeType PrivilegeType { get; set; }
public List<Guid> spaces;
}当空格数组不是null时,就会得到反序列化错误。我可以通过简单地为Guid创建一个包装类来解决这个问题。
public class Space
{
public Guid spaceId;
}然后,我可以在我的特权类中使用一个List<Space>,而不是List<Space>,这一切都很好。但是我想知道是否有更好的方法来做到这一点,因为我不想有一个多余的包装类。那么,在不为我的特权类型对象编写自定义反序列化器的情况下,有什么简单的方法可以避免这种情况吗?
我正在用JSON.Net反序列化。
发布于 2015-08-27 06:37:00
您可以使用一个简单的JsonConverter类将spaces对象数组扁平化为GUID列表,从而消除对包装类的需求。
以下是转换器所需的代码:
class SpaceListConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(List<Guid>));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return JArray.Load(reader)
.Children<JObject>()
.Select(jo => Guid.Parse((string)jo["spaceId"]))
.ToList();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}要使用它,请用如下所示的Spaces属性注释ProfilePrivilege类中的[JsonConverter]属性:
public class ProfilePrivilege
{
...
[JsonConverter(typeof(SpaceListConverter))]
public List<Guid> Spaces;
...
}然后,当你反序列化,一切都应该“只是工作”。
这里的完整演示:https://dotnetfiddle.net/EaYgbe
https://stackoverflow.com/questions/32184375
复制相似问题