我有一個包含這樣解析XML具有正確的xsd:類型
<Value xsi:type="xsd:short">0</Value>
<Value xsi:type="xsd:string">foo</Value>
<Value xsi:type="xsd:boolean">false</Value>
<!-- ... many other types -->
元素如何可以自動解析/的方式,我得到Value
元素在正確的.NET類型的內容反序列化這個XML that corresponds與xsd:type(例如System.Int16
,System.String
,System.Boolean
)?
這是我嘗試過的,但它有點脆弱,所有這些.NET XML API都必須有內置的方式。
foreach (var value in XDocument.Load(new StreamReader(@"c:\bar.xml")).Descendants("Value"))
{
var actualValue = GetValue(value);
}
...
// TODO: Get rid of this hand written method, .NET should do this for me
private static object GetValue(XElement value)
{
XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance";
var type = value.Attributes(ns + "type").Single().Value;
switch (type)
{
case "xsd:short":
return (short)value;
case "xsd:boolean":
return (bool)value;
case "xsd:string":
return (string)value;
...
}
throw new UnknownTypeException();
}
這與我的解決方案有什麼不同?我的解決方案已經可行由於switch語句,我想徹底擺脫'GetValue' *方法*。你只是插入了這個方法。 – bitbonk