第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

將Json反序列化為Asp.Net Web API中的派生類型

將Json反序列化為Asp.Net Web API中的派生類型

白豬掌柜的 2019-12-16 10:35:34
我正在調(diào)用WebAPI的方法,該方法發(fā)送一個(gè)我想與模型匹配(或綁定)的json。在控制器中,我有一個(gè)類似的方法:public Result Post([ModelBinder(typeof(CustomModelBinder))]MyClass model);“ MyClass”,作為一個(gè)抽象類的參數(shù)給出。我想根據(jù)所傳遞的json的類型,實(shí)例化正確的繼承類。為了實(shí)現(xiàn)它,我正在嘗試實(shí)現(xiàn)一個(gè)自定義的活頁(yè)夾。問(wèn)題是(我不知道它是否很基本,但是什么也找不到)我不知道如何檢索請(qǐng)求中包含的原始Json(或更好的某種序列化)。我懂了:actionContext.Request.Content但是所有方法都公開(kāi)為異步方法。我不知道這適合將生成模型傳遞給控制器方法的人...將Json反序列化為Asp.Net Web API中的派生類型
查看完整描述

4 回答

?
墨色風(fēng)雨

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊

您可以正常調(diào)用異步方法,您的執(zhí)行將被暫停,直到該方法返回為止,并且您可以以標(biāo)準(zhǔn)方式返回模型。像這樣打電話:


string jsonContent = await actionContext.Request.Content.ReadAsStringAsync();

它將為您提供原始JSON。


查看完整回答
反對(duì) 回復(fù) 2019-12-16
?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊

如果您想使用TypeNameHandling.Auto但又擔(dān)心安全性,或者不喜歡api消費(fèi)者需要幕后知識(shí),則可以處理$ 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() };

最終,我在包含不同類型對(duì)象的屬性上使用了包裝類和[JsonProperty(TypeNameHandling = TypeNameHandling.Auto)],因?yàn)槲覠o(wú)法通過(guò)配置實(shí)際的類來(lái)使其正常工作。


這種方法允許消費(fèi)者在他們的請(qǐng)求中包括所需的信息,同時(shí)允許將允許值的文檔獨(dú)立于平臺(tái),易于更改和易于理解。所有這些都無(wú)需編寫(xiě)自己的converster。


感謝:https : //mallibone.com/post/serialize-object-inheritance-with-json.net,向我展示了該字段屬性的自定義反序列化器。


查看完整回答
反對(duì) 回復(fù) 2019-12-16
  • 4 回答
  • 0 關(guān)注
  • 603 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)