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 個の Field を含む配列です。ただし、これらのフィールドのすべてのプロパティは NULL (または false) です。

他のいくつかの API 呼び出しにも同じ方法を使用しています。クラスを比較しましたが、唯一の違いは、クラス (フィールド) に 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 に答える