Json.NETCustomSerializationUsingJsonConverter-HowtoGet"Default"Behavior我的类DataType有一个JsonConverter。当Json中使用的普通字符串作为DataType类型的属性值时,我想做一些特殊的处理。在值是“完整”对象的情况下,我想进行“正常”反序列化。这是我的尝试publicoverrideobjectReadJson(JsonReaderreader,TypeobjectType,objectexistingValue,JsonSerializerserializer){if(reader.Value!=null&&reader.ValueType==typeof(string)){returnsomeSpecialDataTypeInstance;}elseif(reader.TokenType==JsonToken.StartObject){DataTypedataType=serializer.Deserialize(reader);返回数据类型;}else{抛出新的JsonSerializationException();但这行不通,因为这一行:DataTypedataType=serializer.Deserialize(reader);导致无限递归。这可以轻松完成吗?(不需要手动一个一个的属性)一个简单的方法是分配一个类的实例,然后使用JsonSerializer.Populate(JsonReader,Object)。这是它在标准CustomCreationConverter中完成的方式:一些特殊数据类型实例;}elseif(reader.TokenType==JsonToken.StartObject){existingValue=existingValue??serializer.ContractResolver.ResolveContract(objectType).DefaultCreator();serializer.Populate(reader,existingValue);返回现有值;}elseif(reader.TokenType==JsonToken.Null){returnnull;}else{抛出新的JsonSerializationException();请注意,这不会处理启用TypeNameHandling并且存在指定多态“$type”的“$type”属性的情况。在这种情况下,您需要在接口的JsonConverter中使用较新的JsonDerivedTypeConverer执行一些技巧。这还假定该类型具有Json.NET可访问的无参数构造函数。如果不是,且existingValue为null,则需要通过newDataType(arg1,arg2,...)手动构造。样品小提琴。以上是C#学习教程:UsingJsonConverterforJson.NETcustomserialization–如何获取“默认”行为共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多加关注——本文整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
