我有一个自定义JsonConverter,用于ViewModels中的DateTimeOffset
属性。我有100多个ViewModel。
public class ItemViewModel
{
public string Name { get; set; }
[JsonConverter(typeof(CustomDateTimeOffsetConverter))]
public DateTimeOffset DateCreated { get; set; }
}
如何将此属性应用于所有DateTimeOffset属性,而不将其添加到所有ViewModel?
当我读到这个答案时,我以为我有了解决方案,但当我应用它时,CustomResolver只在父对象本身上触发,而不是DateTimeOffset属性或任何属性。
public class CustomResolver : DefaultContractResolver
{
protected override JsonObjectContract CreateObjectContract(Type objectType)
{
JsonObjectContract contract = base.CreateObjectContract(objectType);
if (objectType == typeof(DateTimeOffset))
{
contract.Converter = new CustomDateTimeOffsetConverter();
}
return contract;
}
}
总而言之,其他一切我都在工作。如果我手动添加[JsonConverter(typeof(CustomDateTimeOffsetConverter))]
属性,那么我的应用程序就像一个魅力。我只是问如何自动添加属性,而不是手动添加。
您需要将转换器添加到传递给序列化程序的JsonSerializerSettings.Converters
中。
您的JsonSerializerSettings
将如下所示:
var settings = new JsonSerializerSettings()
{
Converters =
{
new CustomDateTimeOffsetConverter()
}
};
您的自定义转换器还应该宣传它可以通过以下JsonConverter
方法的覆盖来转换DateTimeOffset
类型:
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(DateTimeOffset));
}