我反序列化 XML 到 List<> 是空的
My Deserialize XML to List<> is empty
我在从 XML 的反序列化中填充列表时遇到问题。
这是我的 class 个对象(在客户端):
[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
没有正确反映 class 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>
class定义为
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",就像您原来所做的那样。
问题出在 属性 组上使用的属性。
使用您定义的属性,所有 XML 元素 "Group" 需要包含在名为 "Items".
的元素中
解决方法很简单,如下使用XmlElement属性即可。将属性更改为使用 XmlElement("Group") 后,它应该可以工作。
public class Groups
{
public Groups()
{
group = new List<Group>();
}
[XmlElement("Group")]
public List<Group> group { get; set; }
}
我在从 XML 的反序列化中填充列表时遇到问题。
这是我的 class 个对象(在客户端):
[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
没有正确反映 class 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>
class定义为
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",就像您原来所做的那样。
问题出在 属性 组上使用的属性。 使用您定义的属性,所有 XML 元素 "Group" 需要包含在名为 "Items".
的元素中解决方法很简单,如下使用XmlElement属性即可。将属性更改为使用 XmlElement("Group") 后,它应该可以工作。
public class Groups
{
public Groups()
{
group = new List<Group>();
}
[XmlElement("Group")]
public List<Group> group { get; set; }
}