所以,如果我有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名称空间的知识,我发现这是名称空间也导致了一个额外的错误与相同的描述:(。 –