Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Json.NET如何通过属性覆盖定义自定义JsonConverter的类型的序列化?

Json.NET如何通过属性覆盖定义自定义JsonConverter的类型的序列化?
EN

Stack Overflow用户
提问于 2013-06-28 15:36:19
回答 1查看 16.7K关注 0票数 17

我正在尝试使用Json.NET和自定义的JsonConverter对象来反序列化一个类。该类当前定义了一个转换器,用于使用JsonConverterAttribute进行默认序列化。我需要通过传入自定义转换器来执行自定义反序列化。但是,反序列化似乎仍然使用默认转换器。怎样才能让Json.NET更喜欢我的自定义转换器?

这里有一些示例代码演示了这个问题。我使用的是NewtonSoft.Json 4.5.11:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void Main()
{
    JsonConvert.DeserializeObject<Foo>("{}"); // throws "in the default converter"
    var settings = new JsonSerializerSettings { Converters = new[] { new CustomConverter() } };
    JsonConvert.DeserializeObject<Foo>("{}", settings); // still throws "in the default converter" :-/
}

[JsonConverter(typeof(DefaultConverter))]
public class Foo {
}

public class DefaultConverter : JsonConverter {
    public override bool CanConvert(Type objectType)
    {
        return typeof(Foo).IsAssignableFrom(objectType);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new Exception("in the default converter!");
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new Exception("in the default converter!");
    }
}

public class CustomConverter : JsonConverter {
    public override bool CanConvert(Type objectType)
    {
        return typeof(Foo).IsAssignableFrom(objectType);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new Exception("in the custom converter!");
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new Exception("in the custom converter!");
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-28 17:17:27

您需要使用自定义合同解析器。仅当未为类型指定转换器时,默认协定解析器才使用设置中的转换器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class CustomContractResolver : DefaultContractResolver
{
    protected override JsonConverter ResolveContractConverter (Type objectType)
    {
        if (typeof(Foo).IsAssignableFrom(objectType))
            return null; // pretend converter is not specified
        return base.ResolveContractConverter(objectType);
    }
}

用法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
JsonConvert.DeserializeObject<Foo>("{}", new JsonSerializerSettings {
    ContractResolver = new CustomContractResolver(),
    Converters = new[] { new CustomConverter() },
});
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17368484

复制
相关文章
Newtonsoft.Json高级用法
本文介绍了Newtonsoft.Json在.NET框架中的序列化用法,包括数组、List、字典、集合、枚举、Nullable类型、自定义转换、跨语言特性、序列化筛选器和性能优化等。
用户1168362
2018/01/05
3.1K0
Newtonsoft.Json高级用法
如何更改Json.NET的序列化规则
我想要使序列化出来的JSON都是小写,可以通过建立 LowercaseContractResolver:DefaultContractResolver
javascript.shop
2019/09/04
1.3K0
如何通过反射获取属性的名字和属性类型
还是泛型dao中遇到的问题,以往我们要查询数据库中表中的数据的时候,需要每张表都会写一个dao操作数据库,现在的需求是只写一个dao,这是个万能的dao,适用于所有的表,进行增删改查都可用。显然我们事先不知道要查哪个表,泛型dao的基本要求就是对所有的表都适用,这就需要我们动态的获取表名,基本思想可以是方法中传入一个类(前提是数据库中的表和实体类都是一一对应的)的实例,通过反射获取这个实体类中的属性名和属性类型,这就用到了java中反射这个特性。
凯哥Java
2022/12/16
3.7K0
如何通过反射获取属性的名字和属性类型
Python 序列化/反序列化自定义类型
内置json模块对于Python内置类型序列化的描述 """Extensible JSON <http://json.org> encoder for Python data structures. Supports the following objects and types by default: +-------------------+---------------+ | Python | JSON | +====
雪飞鸿
2020/09/21
8670
JSON序列化 反序列化 自定义属性字段
FastJson中的注解@JSONField,一般作用在get/set方法上面,常用的使用场景有下面三个: 修改和json字符串的字段映射【name】 格式化数据【format】 过滤掉不需要序列化的字段【serialize】
Qwe7
2022/04/02
1.1K0
FastAPI(47)- 通过 Response 自定义响应的类型
假设返回一个 XML 格式的响应 import uvicorn from fastapi import FastAPI, Response app = FastAPI() @app.get("/
小菠萝测试笔记
2021/10/09
1K0
FastAPI(47)- 通过 Response 自定义响应的类型
为自定义属性包装类型添加类 @Published 的能力
本文将对 @Published 与符合 ObservableObject 协议的类实例之间的沟通机制做以介绍,并通过三个示例:@MyPublished( @Published 的仿制版本 )、@PublishedObject(包装值为引用类型的 @Published 版本)、@CloudStorage(类似 @AppStorage ,但适用于 NSUbiquitousKeyValueStore ),来展示如何为其他的自定义属性包装类型添加可访问包裹其的类实例的属性或方法的能力。
东坡肘子
2022/07/28
3.4K0
为自定义属性包装类型添加类 @Published 的能力
【说站】css如何实现自定义的属性
1、定义一个自定义属性需要使用--开始,然后属性值需要是一个有效的CSS值。像其他属性一样,一个规则集中定义:
很酷的站长
2022/11/23
6640
【说站】css如何实现自定义的属性
nginx通过自定义header属性来转发不同的服务
通过配置nginx 匹配请求头wx_unionid 来转发到灰度环境。 核心:客户端自定义的http header,在nginx的配置文件里能直接读取到。 条件:header必须用减号“-”分隔单词,nginx里面会转换为对应的下划线“_”连接的小写单词。
py3study
2020/03/04
11.1K0
自定义类型的创建
 以上方法,对于有其他OO语言经验的开发人员去看,比较容易理解,但是性能上并不推荐。因为每次创建新的实例都需要进行一次判断,哪怕这次的性能损耗是极小的,但毕竟也是有损耗。
就只是小茗
2018/12/07
1.1K0
CODING 敏捷开发:如何自定义属性
CODING 承载了最先进的敏捷研发理论,能够帮助您和您的团队快速入门敏捷研发,并通过标准化的流程和完整的信息统计成为企业实践敏捷研发的好工具。在上一篇视频指南中我们对敏捷项目管理中的工作流配置进行了介绍。本期视频中您可以根据企业的需要对需求/任务/缺陷的属性信息进行自定义。
腾讯云 CODING
2019/09/16
4070
CODING 敏捷开发:如何自定义属性
使用 System.Text.Json 时,如何处理 Dictionary 中 Key 为自定义类型的问题
在使用 System.Text.Json 进行 JSON 序列化和反序列化操作时,我们会遇到一个问题:如何处理字典中的 Key 为自定义类型的问题。
newbe36524
2023/08/23
3470
Gson如何自定义Calendar序列化/反序列化
发现birthday最终实例化后,类型是 GregorianCalendar(即:抽象类Calendar的子类),然后把刚才的代码略改了下:
菩提树下的杨过
2022/04/27
8600
Gson如何自定义Calendar序列化/反序列化
【Kotlin】Kotlin 类的继承 二 ( 属性覆盖 | 属性覆盖的四种情况 | 常量 / 变量 属性覆盖 | 子类初始化与属性覆盖 )
① 属性覆盖前提 : 在父类中使用 open 修饰的属性 , 可以在子类中被覆盖 ;
韩曙亮
2023/03/27
1.2K0
【Kotlin】Kotlin 类的继承 二 ( 属性覆盖 | 属性覆盖的四种情况 | 常量 / 变量 属性覆盖 | 子类初始化与属性覆盖 )
自定义属性 declare-styleable数据类型简介:
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/159158.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/15
7170
asp.net core 关于自增长ID数据保护(IDOR漏洞)[通俗易懂]
开始前先大概的描述下IDOR漏洞是啥。嗯! 举个例子,有一个角色下面有N个用户,拥有这个角色的用户都有自身创建的普通用户操作权限(比如删除)。我们一般情况都是通过表主键来操作这条记录的,那么这么一个功能就涉及到两个接口(查询列表,删除指定用户)。
全栈程序员站长
2022/08/14
1K0
从 WebAPI Beta 更新到WebAPI RC
The official word on changes from Beta to RC for Web API-related topics (filtered from the original page). ASP.NET Web API now uses Json.NET for JSON formatting: The default JSON formatter in ASP.NET Web API now uses Json.NET for JSON serialization. Json.N
张善友
2018/01/29
1.2K0
从 WebAPI Beta 更新到WebAPI RC
[android] 手机卫士自定义控件的属性
上一节完成的自定义组合控件,灵活性不够,控件的显示信息上,仿照系统属性,自定义自己的属性
唯一Chat
2019/09/10
6990
Scala的自定义类型标记
Scala中有很多千奇百怪的符号标记,看起来是那么的独特,就像是一杯dry martini...好像黑夜中的萤火虫,那么耀眼,那么出众。
程序那些事
2020/07/08
8520
SpringBoot实现自定义路由覆盖
公司最近有一个项目二期需要对一些功能进行改造,涉及部分框架内置业务接口个性化定制,兼容老接口功能并且增加一部分新的数据返回,由于前端调用这些接口分布较多且较为零碎,修改测试成本较大,所以打算在框架层面提供路由覆盖功能,加快项目进度减少无技术含量的修改带来的系统风险
code2roc
2023/07/19
4180

相似问题

忽略Json.NET自定义JsonConverter

33

如何指示自定义JSON.NET JsonConverter识别特定属性已在上游序列化?

19

具有数据类型的Json.NET自定义JsonConverter

20

Json.NET使用JsonConverter的自定义序列化--如何获得“默认”行为

13

如何使用自定义JsonConverter反序列化Json.NET中的子对象?

35
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文