0

我正在尝试反序列化来自 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>"

字段类:

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 个字段的数组。但是这些字段的所有属性都是 NULL(或 false)。

我对其他几个 API 调用使用相同的方法。我已经比较了这些类,我看到的唯一区别是类 (Field) 具有 bool 属性。所以我认为这就是问题所在。我已将 bool 属性更改为字符串,但反序列化后所有属性仍为 NULL。

4

1 回答 1

1

引起我注意的第一件事是您的 FieldDTO 类中的名称空间与 XML 文档中的名称空间不匹配。

"api.paycento.com/1.0"
"api.playcento.com/1.0"
于 2012-05-03T08:59:32.980 回答