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

反序列化期间如何以编程方式选择构造函数?

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

反序列化期间如何以编程方式选择构造函数?

如果无法向

[JsonConstructor]
目标类添加属性(因为您不拥有代码),则通常的解决方法是
JsonConverter
按照@James
Thorpe在注释中的建议创建自定义。这很简单。您可以将JSON加载到中
JObject
,然后从中选择各个属性以实例化
Claim
实例。这是您需要的代码:

class ClaimConverter : JsonConverter{    public override bool CanConvert(Type objectType)    {        return (objectType == typeof(System.Security.Claims.Claim));    }    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)    {        JObject jo = JObject.Load(reader);        string type = (string)jo["Type"];        string value = (string)jo["Value"];        string valueType = (string)jo["ValueType"];        string issuer = (string)jo["Issuer"];        string originalIssuer = (string)jo["OriginalIssuer"];        return new Claim(type, value, valueType, issuer, originalIssuer);    }    public override bool CanWrite    {        get { return false; }    }    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)    {        throw new NotImplementedException();    }}

要使用转换器,只需将其实例传递给

JsonConvert.DeserializeObject<T>()
方法调用:

Claim claim = JsonConvert.DeserializeObject<Claim>(json, new ClaimConverter());

小提琴:https :
//dotnetfiddle.net/7LjgGR



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

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

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