我在Web API中使用Json.NET,并且有一个如下所示的请求类:
public class Model
{
[JsonProperty("id", Required = Required.Always)]
public string Id { get; set; }
[JsonProperty("value", Required = Required.AllowNull)]
public JRaw Value { get; set; }
}
我希望能够在Value
属性中接收不同类型的值(例如string
,bool
,array[]
,object
等。 )。
我想手动反序列化Value
属性,因为我有一些要用于特殊情况的自定义转换器。
例如,我有一个StringDateTimeConverter
(可以转换ISO_8601
字符串和UNIX timestamps
)。
这是我对Value
属性进行反序列化的方式:
object result = JsonConvert.DeserializeObject(model.Value.ToString(), systemType, serailizerSettings);
在这种情况下,systemType
是System.DateTime
,我已经将StringDateTimeConverter
添加到了serializerSettings
转换器中。
问题在于,我的转换器每次接收System.DateTime
对象而不是string
对象时,这意味着它仍然反序列化Value
属性。
有人知道如何防止财产反序列化吗?
很明显,我尝试使用JRaw
,我猜它主要用于序列化(而不是反序列化),并且object
是Value
属性的类型。
注意对于我来说,Model
类不使用自定义转换器,因为我需要在选择了服务器端逻辑的某些服务器端逻辑之后反序列化Value
属性用于Value
属性反序列化的正确类型的转换器。