C# 使用JSON.Net对接口列表中的属性进行序列化和反序列化
我在这里读过几篇类似的帖子,但大多数帖子都试图做一些比我想做的更难的事情。其余的职位似乎对我不起作用 我有两门课:C# 使用JSON.Net对接口列表中的属性进行序列化和反序列化,c#,asp.net-web-api,json.net,C#,Asp.net Web Api,Json.net,我在这里读过几篇类似的帖子,但大多数帖子都试图做一些比我想做的更难的事情。其余的职位似乎对我不起作用 我有两门课: public class Zone { public Zone() { Areas = new List<IZoneArea>(); } public string Name { get; set; } public List<IZoneArea> Areas { get; set; } } public class ZoneArea {
public class Zone
{
public Zone() { Areas = new List<IZoneArea>(); }
public string Name { get; set; }
public List<IZoneArea> Areas { get; set; }
}
public class ZoneArea
{
public string Name { get; set; }
}
// This method is the same in all the variations
public override bool CanConvert(Type objectType)
{
return objectType == typeof(IZoneArea);
}
// The following is only one of the variations of the ReadJson method I tried
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var data = JObject.Load(reader);
var area = new ZoneArea();
serializer.Populate(data.CreateReader(), area);
return area;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
public class ZoneAreaConverter : CustomCreationConverter<IZoneArea>
{
public override IZoneArea Create(Type objectType)
{
return new ZoneArea();
}
}
公共类ZoneAreaConverter:CustomCreationConverter
{
公共覆盖IZoneArea创建(类型objectType)
{
返回新的ZoneArea();
}
}
var zones = JsonConvert.DeserializeObject<List<Zone>>(cache.Cache.ToString(), new ZoneAreaConverter());
var zones=JsonConvert.DeserializeObject(cache.cache.ToString(),new ZoneAreaConverter());
我一直觉得自己很接近,但错过了一些东西。在我看来,你做的比你需要做的更多。您编写自定义转换器有什么原因吗?我已经发布了一个答案,仅使用标准的JsonConvert方法,似乎它们在您的情况下应该可以正常工作。我无法重现您的问题—您的
CustomCreationConverter
工作正常。看见您是否可以编辑您的问题以包含重现您的问题的问题?为什么要传递转换器?什么是缓存?您是否简单地尝试过:returnserializer.Deserialize(reader)代码>在你的ReadJson方法中?@dbc我怎么会错过dotnetfiddle.net!这太棒了!事实上你是对的。我把所有的东西都放进自己的解决方案中,效果非常好。格式。缩进对流程很重要,还是只是让它更具可读性?@jrandomuser-Formatting。缩进只是为了让它看起来漂亮。在我看来,你做的比你需要做的更多。您编写自定义转换器有什么原因吗?我已经发布了一个答案,仅使用标准的JsonConvert方法,似乎它们在您的情况下应该可以正常工作。我无法重现您的问题—您的CustomCreationConverter
工作正常。看见您是否可以编辑您的问题以包含重现您的问题的问题?为什么要传递转换器?什么是缓存?您是否简单地尝试过:returnserializer.Deserialize(reader)代码>在你的ReadJson方法中?@dbc我怎么会错过dotnetfiddle.net!这太棒了!事实上你是对的。我把所有的东西都放进自己的解决方案中,效果非常好。格式化.Indented对流程很重要,还是只是让它更可读?@jrandomuser-Formatting.Indented只是让它看起来更漂亮。