2010-08-11 33 views
1

我正致力于让我的.NET对象序列化/反序列化。作为我们XML文件的要求,对象必须位于名为mycompany的主节点内。这里是一个文件的例子:来自内部XML节点的XML反序列化

<?xml version="1.0" encoding="utf-8"?> 
<mycompany> 
    <station> 
    <serial>VAA008090067</serial> 
    </station> 
</mycompany> 

我遇到了一个问题得到这反序列化。我不知道如何告诉序列化程序,“嘿,请确保在反序列化之前挖掘到mycompany节点。”

这里是我当前deserializtion代码(不占根节点):

Stream binaryStream = File.Open(Filename, FileMode.Open); 
XmlSerializer xformatter = xformatter = new XmlSerializer(typeof(T)); 
obj = (T)xformatter->Deserialize(stream); 

我试图做下面的代码:创建一个XmlTextStream,在文件头节点读取,mycompany节点,那么流传递到串行

Stream binaryStream = File.Open(Filename, FileMode.Open); 
xmlReader = gcnew XmlTextReader(binaryStream); 
xmlReader.Read(); // add error checking 
xmlReader.Read(); // add error checking 
xformatter = gcnew XmlSerializer(T.typeid); 
obj = (T)xformatter.Deserialize(xmlReader); 

以上不工作,我抛出一个XmlElement error: Root element is missing

我知道有一个简单的解决方案,但我无法找到它。

+0

说实话我不知道关于整个问题,但你的解析成XML第一可能是你的根元素缺少 – espais 2010-08-11 15:19:53

回答

3

将其更改为

xformatter.Deserialize(xmlReader.ReadSubTree()); 
+0

下出现异常的原因:ReadSubTree只能是如果Reader在元素节点上,则称为“我还尝试在反序列化之前抛出一个writer-> Read()。我从流中分配读取的方式不正确吗? – greggorob64 2010-08-11 15:25:06

+0

将'Read()'调用替换为'ReadStartElement()'调用' – SLaks 2010-08-11 15:48:22

+2

您是先生,是一位学者和圣人。 – greggorob64 2010-08-11 18:51:49