我有一个具有接口(interface)类型属性的类,例如:publicclassFoo{publicIBarBar{get;set;}}我还有多个可以在运行时设置的IBar接口(interface)的具体实现。其中一些具体类需要自定义JsonConverter来进行序列化和反序列化。利用TypeNameHandling.Auto选项,需要IBar类的非转换器可以完美地序列化和反序列化。另一方面,自定义序列化类没有$type名称输出,虽然它们按预期序列化,但不能反序列化为具体类型。我试图在自定义JsonConverter中自己写出$type名称元数据;然而,在反序列化时,转换器将被完全绕
我的类DataType有一个JsonConverter。当在Json中使用纯字符串作为DataType类型的属性值时,我想做一些特殊处理。在值是“完整”对象的情况下,我想进行“正常”反序列化。这是我的尝试publicoverrideobjectReadJson(JsonReaderreader,TypeobjectType,objectexistingValue,JsonSerializerserializer){if(reader.Value!=null&&reader.ValueType==typeof(string)){returnsomeSpecialDataTypeInsta
我需要帮助了解如何使用JsonConverter.ReadJson方法将任意数量的类型(字符串、bool值、日期、整数、数组、对象)的值转换为特定的自定义类型。例如我有以下;publicoverrideobjectReadJson(JsonReaderreader,TypeobjectType,objectexistingValue,JsonSerializerserializer){//wherereader.Valuecouldbeastring,boolean,Date,int,array,object//andinthisexamplethevalueofreader.Valu
我正在尝试使用Json.NET和自定义JsonConverter对象反序列化一个类。该类当前使用JsonConverterAttribute为默认序列化定义转换器。我需要通过传入自定义转换器来进行自定义反序列化。但是,反序列化似乎仍在使用默认转换器。如何让Json.NET更喜欢我的自定义转换器?下面是一些演示该问题的示例代码。我正在使用NewtonSoft.Json4.5.11:voidMain(){JsonConvert.DeserializeObject("{}");//throws"inthedefaultconverter"varsettings=newJsonSerializ
该项目是一个Asp.NetWebAPI网络服务。我有一个类型层次结构,我需要能够序列化到Json和从Json序列化,所以我从这个SO中获取了代码:HowtoimplementcustomJsonConverterinJSON.NETtodeserializeaListofbaseclassobjects?,并将转换器应用于我的层次结构的基类;像这样的东西(这里有伪代码来隐藏无关紧要的内容):[JsonConverter(typeof(TheConverter))]publicclassBaseType{//notethebaseofthistypehereisfromthelinked
该项目是一个Asp.NetWebAPI网络服务。我有一个类型层次结构,我需要能够序列化到Json和从Json序列化,所以我从这个SO中获取了代码:HowtoimplementcustomJsonConverterinJSON.NETtodeserializeaListofbaseclassobjects?,并将转换器应用于我的层次结构的基类;像这样的东西(这里有伪代码来隐藏无关紧要的内容):[JsonConverter(typeof(TheConverter))]publicclassBaseType{//notethebaseofthistypehereisfromthelinked
我正在编写一个JsonConverter来执行一些我需要在读/写时完成的转换任务。特别是,我采用了现有的序列化行为,并在写入时添加了一些额外的属性/在读取时添加了这些额外的属性。在JsonConverter中,我想利用传递的JsonSerializer实例来执行大部分转换功能。但是,当我这样做时,我最终进入了一个递归循环,其中序列化程序调用我的转换器,该转换器调用序列化程序,该序列化程序调用转换器等。我见过人们做一些事情,例如使用JsonConvert.SerializeObject,从序列化程序实例exceptthis传递所有转换器。但是,这对我不起作用,因为它绕过了我在序列化程序上
使用Json.Net,我的对象中有属性需要特别注意才能序列化/反序列化它们。作为JsonConverter的后代,我成功地完成了这个任务。这是执行此操作的常用方法:publicclassSomeConverter:JsonConverter{publicoverridevoidWriteJson(JsonWriterwriter,objectvalue,JsonSerializerserializer){...}publicoverrideobjectReadJson(JsonReaderreader,TypeobjectType,objectexistingValue,JsonSer
我有一个MVC.net项目,我正在使用mongodb。我使用自定义JsonConverter将ObjectId属性序列化为字符串,正如我在此答案中所述:AutomaticallyretunmongodbObjectIdasstringwithJson.NETinMVC在那里我使用了一个属性,以便在某个属性上使用自定义转换器:[JsonConverter(typeof(ObjectIdConverter))有没有办法告诉序列化程序对ObjectId类型的所有属性使用ObjectIdConverter?我不想回顾整个项目并添加此属性。谢谢! 最佳答案
我有一个复杂的对象图,我正在使用Json.NET进行序列化/反序列化。一些对象派生自抽象类,所以为了使反序列化正常工作,我需要创建一个自定义的JsonConverter。它的唯一作用是在反序列化时选择抽象类的适当具体实现,并允许Json.NET继续前进。当我想序列化时,我的问题就来了。我根本不需要做任何定制的事情。我想获得与使用JsonConvert.SerializeObject没有自定义JsonConverter完全相同的行为。但是,由于我使用自定义JsonConverter类来满足我的反序列化需求,我不得不提供WriteJson实现。由于WriteJson是抽象的,我不能只调用b