为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用Newtonsoft JSON.NET将JSON反序列化为IEnumerable

如何使用Newtonsoft JSON.NET将JSON反序列化为IEnumerable

泛舟湖上清波郎朗 2019-09-24 10:49:11
给出以下JSON:[  {    "$id": "1",    "$type": "MyAssembly.ClassA, MyAssembly",    "Email": "me@here.com",  },  {    "$id": "2",    "$type": "MyAssembly.ClassB, MyAssembly",    "Email": "me@here.com",  }]和这些类:public abstract class BaseClass{    public string Email;}public class ClassA : BaseClass{}public class ClassB : BaseClass{}如何将JSON反序列化为:IEnumerable<BaseClass> deserialized;我不能使用,JsonConvert.Deserialize<IEnumerable<BaseClass>>()因为它抱怨那BaseClass是抽象的。
查看完整描述

3 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

你需要:


 JsonSerializerSettings settings = new JsonSerializerSettings

                 {

                     TypeNameHandling = TypeNameHandling.All

                 };


string strJson = JsonConvert.SerializeObject(instance, settings);

所以JSON看起来像这样:


{

  "$type": "System.Collections.Generic.List`1[[MyAssembly.BaseClass, MyAssembly]], mscorlib",

  "$values": [

    {

      "$id": "1",

      "$type": "MyAssembly.ClassA, MyAssembly",

      "Email": "me@here.com",

    },

    {

      "$id": "2",

      "$type": "MyAssembly.ClassB, MyAssembly",

      "Email": "me@here.com",

    }

  ]

}

然后您可以反序列化它:


BaseClass obj = JsonConvert.DeserializeObject<BaseClass>(strJson, settings)


查看完整回答
反对 回复 2019-09-24
?
侃侃无极

TA贡献2051条经验 获得超10个赞

反序列化时使用以下JsonSerializerSettings构造:


new JsonSerializerSettings()

{

    TypeNameHandling = TypeNameHandling.Objects

})


查看完整回答
反对 回复 2019-09-24
  • 3 回答
  • 0 关注
  • 687 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信