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 關注
- 608 瀏覽
添加回答
舉報