2015-11-08 59 views
0

我有填充從deserilizatiopn從XML列表的問題。我反序列化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; 
} 

這是代碼Deserializethings:

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> 

我沒有得到任何錯誤但對象計數爲零?

+1

您的xml結構中沒有任何Items-Tag,但是您將列表定義爲Items – CSharpie

+0

@CSharpie嗨,感謝您的評論。我在最後時刻添加了Item標籤(絕望)。在添加之前,它給了我相同的結果。 –

+1

https://msdn.microsoft.com/en-us/library/hh371548(v=vs.110).aspx Visual Studio可以從XML生成 –

回答

2

問題是與在屬性組所使用的屬性。 使用您定義的屬性,所有XML元素「Group」都需要包含在名爲「Items」的元素中。

的解決方案是簡單,只需使用的的XmlElement屬性如下。一旦你改變了屬性來使用XmlElement(「Group」)它應該可以工作。

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

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

感謝將測試並彙報:) –

+0

感謝。現在很明顯:_) –

+0

練習使得完美:) – Don

2

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

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

所以,你應該通過包裝每個小組按照當前的設計。

+0

感謝將測試並彙報:) –

0

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標籤「並將XmlArray屬性重命名爲」項目「,就像您原先所做的那樣。

+0

感謝將測試並彙報:) –