栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Json.NET反序列化可以是两种不同数据类型的JSON属性

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Json.NET反序列化可以是两种不同数据类型的JSON属性

这可以通过

JsonConverter
为您的
SupplierData
班级定做来解决。这是转换器的外观:

class SupplierDataConverter : JsonConverter{    public override bool CanConvert(Type objectType)    {        return (objectType == typeof(SupplierData));    }    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)    {        JToken token = JToken.Load(reader);        if (token.Type == JTokenType.Object)        { return token.ToObject<SupplierData>();        }        return null;    }    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)    {        serializer.Serialize(writer, value);    }}

要使用它,你需要做的是添加

[JsonConverter]
到属性
Supplier
你的财产
Data
类是这样的:

public class Data{    [JsonProperty("supplier")]    [JsonConverter(typeof(SupplierDataConverter))]    public SupplierData Supplier { get; set; }}

下面是运行中的转换器的演示。请注意,该演示假定您具有该

data
属性的某种包含对象,因为问题中的JSON不能独立存在。我
RootObject
为此定义了一个类:

public class RootObject{    [JsonProperty("data")]    public Data Data { get; set; }}

实际的演示代码如下:

class Program{    static void Main(string[] args)    {        string json = @"        { ""data"":  {     ""supplier"":      {         ""id"": 15,         ""name"": ""TheOne""     } }        }";        Console.WriteLine("--- first run ---");        RootObject obj = JsonConvert.DeserializeObject<RootObject>(json);        DumpSupplier(obj.Data.Supplier);        json = @"        { ""data"":  {     ""supplier"": false }        }";        Console.WriteLine("--- second run ---");        obj = JsonConvert.DeserializeObject<RootObject>(json);        DumpSupplier(obj.Data.Supplier);    }    static void DumpSupplier(SupplierData supplier)    {        if (supplier != null)        { Console.WriteLine("Id: " + supplier.Id); Console.WriteLine("Name: " + supplier.Name);        }        else        { Console.WriteLine("(null)");        }        Console.WriteLine();    }}

这是上面的输出:

--- first run ---Id: 15Name: TheOne--- second run ---(null)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/465325.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号