所以,如果我有3個不同的文件,其中包含非常長和複雜的xml(我在這裏縮寫),但只是根元素名稱是不同的(不是真的隨機,但我寧願不重複類同一XML):將部分xml反序列化爲類
文件1
<?xml version="1.0"?>
<somerootname1>
<car>
<make>honda</make>
<model>civic</model>
</car>
</somerootname1>
文件2
<?xml version="1.0"?>
<somerootname2>
<car>
<make>honda</make>
<model>civic</model>
</car>
</somerootname2>
文件3
<?xml version="1.0"?>
<somerootname3>
<car>
<make>honda</make>
<model>civic</model>
</car>
</somerootname3>
因爲XmlRootAttribute有AllowMultiple=false
我不能創建一個類來表示以前的xml。
重複「XmlRootAttribute」屬性
[XmlRoot(ElementName="somerootname1")]
[XmlRoot(ElementName="somerootname2")]
public class Root
{
public Automobile Car { get; set; }
}
public class Automobile
{
public string Make { get; set; }
public string Model { get; set; }
}
我想我也許能偷偷摸摸搶正是我需要的元素和反序列化:
var xDoc = XDocument.Parse("myfile.xml");
var xCar = xDoc.Root.Descendants()
.FirstOrDefault(d => d.Name.LocalName.Equals("car"))
var serializer = new XmlSerializer(typeof(Automobile))
using (var reader = xml.CreateReader())
{
result = (Automobile)serializer.Deserialize(reader);
}
不過的結果在InvalidOperationException
:
XML文檔中存在錯誤(0,0)。
隨着的InnerException:
<車>是沒有預料到。
這似乎很不好意思;重命名根元素,然後反序列化或取元素並以<?xml>
爲標籤前綴。還有其他建議嗎?
由於缺乏關於XML名稱空間的知識,我發現這是名稱空間也導致了一個額外的錯誤與相同的描述:(。 –