C# 将XML节点反序列化到从属性获取值的集合中
如果我有这样的xmlC# 将XML节点反序列化到从属性获取值的集合中,c#,.net,xml-serialization,xmlserializer,C#,.net,Xml Serialization,Xmlserializer,如果我有这样的xml <SiteSettings> <sortOptions> <add name="By Date" value="date" /> <add name="By Rating" value="rating" /> </sortOptions> <
<SiteSettings>
<sortOptions>
<add name="By Date" value="date" />
<add name="By Rating" value="rating" />
</sortOptions>
</SiteSettings>
[XmlRoot("SiteSettings")]
public class SerializableSiteSettings
{
public List<NameValuePair> SortOptions { get; set; }
}
public class NameValuePair
{
[XmlAttribute("name")]
public string Name { get; set; }
[XmlAttribute("value")]
public object Value { get; set; }
}
我想把它反序列化成这样一个对象
<SiteSettings>
<sortOptions>
<add name="By Date" value="date" />
<add name="By Rating" value="rating" />
</sortOptions>
</SiteSettings>
[XmlRoot("SiteSettings")]
public class SerializableSiteSettings
{
public List<NameValuePair> SortOptions { get; set; }
}
public class NameValuePair
{
[XmlAttribute("name")]
public string Name { get; set; }
[XmlAttribute("value")]
public object Value { get; set; }
}
[XmlRoot(“站点设置”)]
公共类SerializableSiteSettings
{
公共列表排序选项{get;set;}
}
公共类名称值对
{
[XmlAttribute(“名称”)]
公共字符串名称{get;set;}
[XmlAttribute(“值”)]
公共对象值{get;set;}
}
我尝试将此添加到分类中,但没有成功
[XmlArrayItem("actionButtons", typeof(List<NameValuePair>))]
public List<NameValuePair> ActionButtons { get; set; }
[XmlArrayItem(“操作按钮”,类型(列表))]
公共列表操作按钮{get;set;}
使用时存在一些问题:
公共对象值{get;set;}
的字段时,它不知道如何反序列化该字段,也不知道其中会出现什么。您需要告诉它这些信息,但由于值是一个字符串,这表明字段是简单的,比如字符串。所以,我将在这个答案中假设一个字符串足以保存这个信息
XmlSerializer
,名为SortOptions
的属性将使用SortOptions
而不是SortOptions
的名称使用属性进行序列化XmlSerializer
,add
是每个数组元素的名称Value
读入字符串:
[XmlRoot("SiteSettings")]
public class SerializableSiteSettings
{
[XmlArray("sortOptions")]
[XmlArrayItem("add", typeof(NameValuePair))]
public List<NameValuePair> SortOptions { get; set; }
}
public class NameValuePair
{
[XmlAttribute("name")]
public string Name { get; set; }
[XmlAttribute("value")]
public string Value { get; set; }
}
[XmlRoot(“站点设置”)]
公共类SerializableSiteSettings
{
[XmlArray(“分类”)]
[XmlArrayItem(“添加”,typeof(NameValuePair))]
公共列表排序选项{get;set;}
}
公共类名称值对
{
[XmlAttribute(“名称”)]
公共字符串名称{get;set;}
[XmlAttribute(“值”)]
公共字符串值{get;set;}
}
如果
Value
不是字符串,而是某种多态类型,那么您可能需要为NameValuePair
实现IXmlSerializable
,大致如下:.public List SortOptions{get;set;}应该使用[XmlArray(“SortOptions”)]属性化。谢谢,这两个问题让它起作用了。我没有意识到我作为一个物体仍然有价值。