簡體   English   中英

C#XML反序列化Array元素為null

[英]C# XML Deserialize Array elements null

我正在嘗試反序列化來自REST API的響應。

"<FieldListDTO xmlns=\"api.playcento.com/1.0\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">
<Allfield>
<FieldDTO>
<Fieldname>Mobile nr</Fieldname>
<Fieldtype>T</Fieldtype>
<Fieldvalue>003241234578</Fieldvalue>
<Fk_id_page>CP584ea74ce5ad4e2d8561d75fc6944f96</Fk_id_page>
<Id_field>FI152dcde5ef9849898b12d6a3f2cdb4ee</Id_field>
<Required>true</Required>
</FieldDTO>
</Allfield>
<Totalcount>1</Totalcount>
</FieldListDTO>"

Field類:

namespace PlaycentoAPI.Model
{
    [XmlRoot("FieldListDTO",Namespace = "api.playcento.com/1.0")]
    [XmlType("FieldListDTO")]
    public class FieldListDTO
    {
        public FieldListDTO() { }

        [XmlElement("Totalcount")]
        public int TotalCount { get; set; }

        [XmlArray("Allfield")]
        [XmlArrayItem("FieldDTO", typeof(Field))]
        public Field[] Field { get; set; }

    }
    [XmlRoot("FieldDTO", Namespace = "api.paycento.com/1.0")]
    [XmlType("FieldDTO")]
    public class Field
    {
        public Field()
        {
        }

        [XmlElement("Id_field")]
        public string ID_Field { get; set; }
        [XmlElement("Fieldtype")]
        public string FieldType { get; set; }
        [XmlElement("Fk_id_page")]
        public string FK_ID_PAGE { get; set; }
        [XmlElement("Required")]
        public bool Required { get; set; }
        [XmlElement("Fieldname")]
        public string FieldName { get; set; }
        [XmlElement("Fieldvalue")]
        public string FieldValue { get; set; }
    }
}

我的代碼調用API並反序列化:

string response = Helper.PerformAndReadHttpRequest(uri, "GET", "");
                FieldListDTO myObject;
                XmlReaderSettings settings = new XmlReaderSettings();
                using (StringReader textReader = new StringReader(response))
                {
                    using (XmlReader xmlReader = XmlReader.Create(textReader, settings))
                    {
                        XmlSerializer mySerializer = new XmlSerializer(typeof(FieldListDTO));
                        myObject = (FieldListDTO)mySerializer.Deserialize(xmlReader);
                    }
                }
                return myObject.Field;

在我的實際答復中,我得到了14個FieldDTO。 在反序列化xml之后,FieldListDTO myObject包含TotalCount = 14,而Field是包含14個Field的數組。 但是這些字段的所有屬性均為NULL(或false)。

我將相同的方法用於其他幾個API調用。 我已經比較了類,並且看到的唯一區別是類(Field)具有bool屬性。 所以我認為這就是問題所在。 我已將bool屬性更改為字符串,但是反序列化后所有屬性仍然為NULL。

首先引起我注意的是FieldDTO類中的名稱空間與XML文檔中的名稱空間不匹配。

"api.paycento.com/1.0"
"api.playcento.com/1.0"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM