C# 是否可以复制JsonObjectAttribute的行为?
我正在尝试序列化/反序列化另一个包中的类,该包实现IEnumerable,但也包含我希望包含在序列化流中的其他属性C# 是否可以复制JsonObjectAttribute的行为?,c#,serialization,json.net,deserialization,C#,Serialization,Json.net,Deserialization,我正在尝试序列化/反序列化另一个包中的类,该包实现IEnumerable,但也包含我希望包含在序列化流中的其他属性 public class MyList<T> : IList<T> { private List<T> _list; public Foo Bar { get; set; } // IList implementation ... } 由于我已经在使用自定义的ContractResolver对私有字段进行序列化/反序列
public class MyList<T> : IList<T>
{
private List<T> _list;
public Foo Bar { get; set; }
// IList implementation ...
}
由于我已经在使用自定义的
ContractResolver
对私有字段进行序列化/反序列化,我是否可以简单地重新编写if
子句,以使用与应用JsonObjectAttribute
时使用的相同的Converter
?您能确切地说明您需要什么吗?您只是在应用默认的[JsonObject]
,还是希望设置一些JsonObjectAttribute
属性,例如[JsonObject(MemberSerialization=MemberSerialization.Fields)]
?例如,如果您需要[JsonObject(MemberSerialization=MemberSerialization.Fields)]
,这可能与以下内容有关:(尽管那里的要求比你的复杂)@dbc:我想要的是能够序列化/反序列化一个对象,该对象将IList
实现为对象,而不是IEnumerable
,而无需编写我自己的JsonConverter
。在Json.Net
中必须已经有一个转换器具有这种行为,并且是jsonobjectattribute的转换器e
必须强制Json.Net
使用否,没有转换器。注意到存在JsonObjectAttribute
并调用CreateObjectContract(objectType)
。这很容易用自定义协定解析程序实现。更难的是模拟所有JsonObjectAttribute
的功能。那么,您需要它们吗?还是只需要[JsonObject]
@dbc[JsonObject]
就足够了。那么所需要的就是覆盖CreateContract
并返回CreateObjectContract
?
public class ConverterContractResolver : DefaultContractResolver
{
public new static readonly ConverterContractResolver Instance = new ConverterContractResolver();
protected override JsonContract CreateContract(Type objectType)
{
JsonContract contract = base.CreateContract(objectType);
// this will only be called once and then cached
if (objectType == typeof(DateTime) || objectType == typeof(DateTimeOffset))
{
contract.Converter = new JavaScriptDateTimeConverter();
}
return contract;
}
}