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

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

無(wú)法使用 ReadAsAsync<T> 反序列化 XML 響應(yīng)中的列表

無(wú)法使用 ReadAsAsync<T> 反序列化 XML 響應(yīng)中的列表

C#
至尊寶的傳說(shuō) 2022-10-15 14:18:16
我正在嘗試讀取并隨后操作來(lái)自 Web API 的響應(yīng)。它的響應(yīng)如下所示:<MYAPI xsi:noNamespaceSchemaLocation="MYAPI.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">   <MySite Resource="some resource name">       <Name>some name</Name>       <URL>some url</URL>       <SecondName>Describes something</SecondName>   </MySite>   ... A lot of these <MySite>...</MySite> are there            <SomeOtherSite Resource="some resource name">       <Name>some name</Name>       <URL>some url</URL>   </SomeOtherSite></MYAPI>SomeOtherSite沒(méi)有重復(fù),只有其中一個(gè)出現(xiàn)在響應(yīng)的末尾。但這MySite是重復(fù)的。我已將此 XML 響應(yīng)的類(lèi)建模為:public class MYAPI{    public List<MySite> MySite { get; set; }    public SomeOtherSite SomeOtherSite { get; set; }}public class MySite{    public string Name { get; set; }    public string URL { get; set; }    public string SecondName { get; set; }}public class SomeOtherSite{    public string Name { get; set; }    public string URL { get; set; }}這是我的代碼:static void Main(){    var handler = new HttpClientHandler();    handler.Credentials = new NetworkCredential("MyUsername", "MyPassword");    var client = new HttpClient(handler);    client.BaseAddress = new Uri("https://sitename.com:PortNumber/");    var formatters = new List<MediaTypeFormatter>()     {        new XmlMediaTypeFormatter(){ UseXmlSerializer = true }     };    var myApi = new MYAPI();    HttpResponseMessage response = client.GetAsync("/api/mysites").Result;    if (response.IsSuccessStatusCode)    {        myApi = response.Content.ReadAsAsync<MYAPI>(formatters).Result;    }}現(xiàn)在myApi唯一的對(duì)象是,SomeOtherSite但列表MySite是空的。有人能告訴我應(yīng)該如何正確反序列化這個(gè)響應(yīng)嗎?我應(yīng)該創(chuàng)建自定義媒體格式化程序嗎?順便說(shuō)一句,我對(duì)此一無(wú)所知。另外,您能否告訴我如何對(duì)Resource響應(yīng)中出現(xiàn)的該屬性進(jìn)行建模?而且我無(wú)法更改 WebAPI 服務(wù)器中的任何內(nèi)容。我只需要使用其中的數(shù)據(jù)并在其他地方使用它。太感謝了!
查看完整描述

1 回答

?
HUWWW

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

經(jīng)過(guò)一些非常好的指導(dǎo)后,我解決了這個(gè)問(wèn)題:https ://stackoverflow.com/users/1124565/amura-cxg非常感謝!

解決方案是使用 XMLAttributes 注釋所有屬性。它正確地反序列化了響應(yīng)。至于Resource屬性,我所需要的只是[XmlAttribute(AttributeName="Resource")]

其余的源代碼按原樣工作。

[XmlRoot(ElementName="MYAPI")]

public class MYAPI 

{

    [XmlElement(ElementName="MySite")]

    public List<MySite> MySite { get; set; }


    [XmlElement(ElementName="SomeOtherSite")]

    public SomeOtherSite SomeOtherSite { get; set; }

}


public class MySite 

{

    [XmlElement(ElementName="Name")]

    public string Name { get; set; }


    [XmlElement(ElementName="URL")]

    public string URL { get; set; }


    [XmlElement(ElementName="SecondName")]

    public string SecondName { get; set; }


    [XmlAttribute(AttributeName="Resource")]

    public string Resource { get; set; }

}

另外,我不需要任何自定義媒體格式化程序。從https://stackoverflow.com/users/1855967/elisabeth的一篇文章中,我了解到我們不應(yīng)該接觸 xsd.exe 工具生成的文件。所以我明確設(shè)置使用默認(rèn)XmlSerializer而不是DataContractSerializer使用:


var formatters = new List<MediaTypeFormatter>() 

    {

        new XmlMediaTypeFormatter(){ UseXmlSerializer = true } 

    };


查看完整回答
反對(duì) 回復(fù) 2022-10-15
  • 1 回答
  • 0 關(guān)注
  • 115 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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