簡體   English   中英

我的反序列化XML至List <>為空

[英]My Deserialize XML to List<> is empty

我在從XML的反序列化中填充列表時遇到問題。

這是我的類對象(在客戶端上):

[Serializable, XmlRoot("Groups"), XmlType("Groups")]
public class Groups
{
    public Groups()
    {
        group = new List<Group>();
    }

    [XmlArray("Items")]
    [XmlArrayItem("Group", typeof(Group))]
    public List<Group> group { get; set; }
}

[XmlType("Group")]
public class Group
{
    [XmlElement("GroupRef")]
    public Guid GroupRef;
    [XmlElement("Name")]
    public string Name;
    [XmlElement("Description")]
    public string Description;
}

這是反序列化的代碼:

XmlSerializer serializer = new XmlSerializer(typeof(Groups));                   
var groups = (Model.Groups)serializer.Deserialize(reader);

這是XML:

<Groups>
  <Group>
  <GroupRef>00000000-0000-0000-0000-000000000000</GroupRef> 
  <Name>Todays Work</Name> 
  <Description>System</Description> 
</Group>
<Group>
  <GroupRef>00000000-0000-0000-0000-000000000000</GroupRef> 
  <Name>All</Name>  
  <Description>System</Description> 
</Group>
<Group>
  <GroupRef>00000000-0000-0000-0000-000000000000</GroupRef> 
  <Name>Unassigned</Name> 
  <Description>System</Description> 
 </Group>    
</Groups>

我沒有錯誤,但是對象計數為零?

您輸入的XML格式錯誤。 如果我構造對象並對其進行序列化,則會得到

<Groups>
<Items>
    <Group>
        <GroupRef>bf2616d7-b98c-4743-8e25-2e0e101ab2da</GroupRef>
        <Name>test</Name>
        <Description>desc</Description>
    </Group>
</Items>
</Groups>

因此,您應該按照當前設計來包裝每個組。

問題在於屬性組上使用的屬性。 使用定義的屬性,所有XML元素“ Group”都必須包含在名為“ Items”的元素中。

解決方案很簡單,只需使用XmlElement屬性,如下所示。 更改屬性以使用XmlElement(“ Group”)后,它應該起作用。

public class Groups
{
    public Groups()
    {
        group = new List<Group>();
    }

    [XmlElement("Group")]
    public List<Group> group { get; set; }
}

您的XML不能正確反映類Groups的結構。 將您的XML更改為此

<Groups>
    <ArrayOfGroup>
        <Group>
          <GroupRef>00000000-0000-0000-0000-000000000000</GroupRef> 
          <Name>Todays Work</Name> 
          <Description>System</Description> 
        </Group>
        <Group>
          <GroupRef>00000000-0000-0000-0000-000000000000</GroupRef> 
          <Name>All</Name>  
          <Description>System</Description> 
        </Group>
        <Group>
          <GroupRef>00000000-0000-0000-0000-000000000000</GroupRef> 
          <Name>Unassigned</Name> 
          <Description>System</Description> 
         </Group>
    </ArrayOfGroup>
</Groups>

和類定義為

public class Groups
{
    public Groups()
    {
        Group = new List<Group>();
    }

    [XmlArray("ArrayOfGroup")]
    public List<Group> Group { get; set; }
}

public class Group
{
    public Guid GroupRef;
    public string Name;
    public string Description;
}

此代碼將正確反序列化您的XML

XmlSerializer serializer = new XmlSerializer(typeof(Groups));
StringReader reader = new StringReader(xmlString);
var groups = (Groups)serializer.Deserialize(reader);

或者,您可以將XML中的標記命名為“ Items”,然后像最初一樣將XmlArray屬性重命名為“ Items”。

暫無
暫無

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

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