以下是到目前为止我为处理由第三方dll返回的xmldocument所采取的步骤。
我将xmldocument保存为segmentationsummary.xml。
我使用xsd.exe创建segmentationsummary.xsd。
我使用xsd.exe创建segmentationsummary.cs。
这是segmationsummary.cs的示例。注意shmresult是根节点表示。
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "omitted")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "omitted", IsNullable = false)]
public partial class ShmResult
{
private ShmResultDownloadDetail[] downloadDetailField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("DownloadDetail")]
public ShmResultDownloadDetail[] DownloadDetail
{
get
{
return this.downloadDetailField;
}
set
{
this.downloadDetailField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "omitted")]
public partial class ShmResultDownloadDetail
{
private string modelCodeField;
/// <remarks/>
public string ModelCode
{
get
{
return this.modelCodeField;
}
set
{
this.modelCodeField = value;
}
}
}
现在,我想用它来阅读xmldocument并开始使用segmentationsummary.cs中的类。这是我写的代码:
private XmlDocument _document;
SegmentationSummary.ShmResult _Result;
private void LoadXML()
{
XmlReader xmlRdr = new XmlNodeReader(_document);
System.Xml.Serialization.XmlSerializer s = new System.Xml.Serialization.XmlSerializer(typeof(SegmentationSummary.ShmResult));
_Result = (SegmentationSummary.ShmResult)s.Deserialize(xmlRdr);
}
当loadXML()被执行时,我会得到这种类型的异常:
试验方法
分段摘要handlertest.testmethod1
引发异常:
System.InvalidOperationException:无效操作异常:
无法生成临时类
(结果=1)。错误CS0030:无法
转换类型
'merc.aircat.shmcoreinterface.segmentationsummary.shmresultdownloaddail[]
到
'merc.aircat.shmcoreinterface.segmentationsummary.shmresultdownloaddail'信息'
错误CS0029:无法隐式
转换类型
'merc.aircat.shmcoreinterface.segmentationsummary.shmresultdownloaddail'信息'
到
'merc.aircat.shmcoreinterface.segmentationsummary.shmresultdownloaddail[]
现在,http://msdn.microsoft.com/en-us/library/ms950721.aspx上的常见问题说明如下:
问:如何序列化
物体?
A:XmlSerializer抛出
当集合包含
未声明给
XmlSerializer的构造函数。你
罐头:
通过向序列化程序传递带有
在
收集。
或
实现从派生的强类型集合
System.Collections.CollectionBase与
与add()方法匹配的索引器。
我的问题是:哪一个是“最好的”,我该如何实施解决方案?
最佳答案
我遇到了类似的问题。
序列化嵌套的未绑定元素时出现问题。Here is an explanation.
为了解决这个问题,我从xsd中删除了maxOccurs=“unbounded”,并重新生成了类文件。在那之后,序列化工作了。