4 回答
TA贡献1853条经验 获得超6个赞
您可以正常调用异步方法,您的执行将被暂停,直到该方法返回为止,并且您可以以标准方式返回模型。像这样打电话:
string jsonContent = await actionContext.Request.Content.ReadAsStringAsync();
它将为您提供原始JSON。
TA贡献2019条经验 获得超9个赞
如果您想使用TypeNameHandling.Auto但又担心安全性,或者不喜欢api消费者需要幕后知识,则可以处理$ type反序列化自身。
public class InheritanceSerializationBinder : DefaultSerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
switch (typeName)
{
case "parent[]": return typeof(Class1[]);
case "parent": return typeof(Class1);
case "child[]": return typeof(Class2[]);
case "child": return typeof(Class2);
default: return base.BindToType(assemblyName, typeName);
}
}
}
然后将其连接到global.asax.Application__Start
var config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings { Binder = new InheritanceSerializationBinder() };
最终,我在包含不同类型对象的属性上使用了包装类和[JsonProperty(TypeNameHandling = TypeNameHandling.Auto)],因为我无法通过配置实际的类来使其正常工作。
这种方法允许消费者在他们的请求中包括所需的信息,同时允许将允许值的文档独立于平台,易于更改和易于理解。所有这些都无需编写自己的converster。
感谢:https : //mallibone.com/post/serialize-object-inheritance-with-json.net,向我展示了该字段属性的自定义反序列化器。
- 4 回答
- 0 关注
- 564 浏览
添加回答
举报