簡體   English   中英

將 XML 反序列化為 C# 對象

[英]Deserializing XML into a C# Objects

我有以下 XML 架構,我試圖將其反序列化為 C# 對象:

<TMMAI>
     <StringReturn>123456789</StringReturn>
     <VectorReturn>
          <VectorElement>test1</VectorElement>
          <VectorElement>test2</VectorElement>
          <VectorElement>test3</VectorElement>
          <VectorElement>test4</VectorElement>
          <VectorElement>test5</VectorElement>
          <VectorElement>test6</VectorElement>
          <VectorElement>test7</VectorElement>
     </VectorReturn>
</TMMAI>

和我想反序列化的 C# 對象(從https://xmltocsharp.azurewebsites.net/生成,但粘貼在上面的 Z3501BB093D363810B671059B9CFED3 模式中):

    [XmlRoot(ElementName = "VectorReturn")]
    public class VectorReturn
    {
        [XmlElement(ElementName = "VectorElement")]
        public List<string> VectorElement { get; set; }
    }

    [XmlRoot(ElementName = "TMMAI")]
    public class TMMAI
    {
        [XmlElement(ElementName = "VectorReturn")]
        public VectorReturn VectorReturn { get; set; }
        [XmlElement(ElementName= "StringReturn")]
        public string StringReturn { get; set; }
    }

啟動並使用默認 XmlDeserializer 后, VectorElement的長度為 0,其中沒有數據。

我還嘗試創建自己的 object 層次結構,如下所示,而不是使用生成工具:

    [XmlRoot("TMMAI")]
    public class TMMAI
    {
        [XmlElement("StringReturn")]
        public string StringReturn { get; set; }
        [XmlElement("VectorReturn")]
        public VectorReturn VectorReturn { get; set; }
    }

    public class VectorReturn
    {
        [XmlElement("VectorElement")]
        public List<VectorElement> VectorElements { get; set; }
    }

    public class VectorElement
    {
        public string Element { get; set; }
    }

這讓我更接近 - VectorElements的大小為 7,這是測試 XML 中<VectorElement>項目的正確數量,但每個 VectorElement.Element 的值是null

我很接近,但我現在無法判斷出了什么問題。 一個錯誤的屬性? object 設計不正確? 需要使用 XmlArray 屬性嗎?

Visual Studio 2015 或更高版本具有內置 XML 到 class 轉換器。 它可能比序列化/反序列化更有優勢。轉到編輯 -> 過去的特殊 -> XML 到類。

下面是使用 VS2019 生成的 class -

// NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0.
    /// <remarks/>
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
    public partial class TMMAI
    {

        private uint stringReturnField;

        private string[] vectorReturnField;
        // Default constructor
        public TMMAI() {} 
        /// <remarks/>
        public uint StringReturn
        {
            get
            {
                return this.stringReturnField;
            }
            set
            {
                this.stringReturnField = value;
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("VectorElement", IsNullable = false)]
        public string[] VectorReturn
        {
            get
            {
                return this.vectorReturnField;
            }
            set
            {
                this.vectorReturnField = value;
            }
        }
    }

暫無
暫無

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

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