2012-07-27 79 views
2

我有一些XML,看起来像这样:反序列化的xml具有相同的元素名称但不同的属性

<Stat Type="first_name">[Value]</Stat> 
<Stat Type="last_name">[Value]</Stat> 
<Stat Type="known_name">[Value]</Stat> 

我想这反序列化一个对象。由于有一个名为“STAT”一个元素名称它使其难以得到的东西,如:

[XmlAttribute("first_name")] 
public string FirstName{get;set;} 

[XmlAttribute("last_name")] 
public string LastName{get;set;} 

[XmlAttribute("known_name")] 
public string KnownName{get;set;} 

有没有得到上面的XML到对象喜欢的方式:

public string FirstName{get;set;} 
public string LastName{get;set;} 
public string KnownName{get;set;} 

感谢。

回答

2

我设法通过扩展来解决这个问题。不理想。我得到的统计数据列表:

[XmlElement("Stat")] 
public List<Stat> Stats { get; set;} 

然后我有这样单独的属性:

public string FirstName 
{ 
    get { return Stats.GetStat("first_name"); } 
} 

的统计属性的GetStat扩展方法然后获取相关的关键。不幸的是,这样,它会遍历我想要获得的每个房产的列表。

public static string GetStat(this List<Stat> stats, string key) 
{ 
    var val = stats.FirstOrDefault(item => item.Type == key); 

    if (val != null) 
    return val.Value ?? String.Empty; 
    return String.Empty; 
} 
0

你可能不得不用XPath自己解析XML。地雷有点生锈,但它的东西像:

var stat = xmlDocument.DocumentElement.GetSingleNode("stat[@type='first_name']"); 
var value = stat.InnerText; 
+0

谢谢,但我需要尝试在序列化程序中执行此操作,而不是使用XPath。 – 2012-07-30 14:44:10

1

如果你想使用序列化,我认为你将需要一个中间对象。所以,反序列化成这样的东西:

public class Stat 
{ 
    [XmlAttribute("Type")] 
    public string Type { get; set; } 

    [XmlText] 
    public string Value { get; set; } 
} 

然后编写一些代码,以平铺成你想要的形状。

+0

我已经在代码中有这个了。但我需要能够将这些数据放入我的对象中。 – 2012-07-30 14:45:09

相关问题