【发布时间】:2021-01-26 15:15:41
【问题描述】:
从 svcutil 生成具有 anyField 属性的类:
[System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.6.1055.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "urn:epcglobal:epcis:xsd:1")]
public partial class ErrorDeclarationExtensionType
{
private System.Xml.XmlElement[] anyField;
private System.Xml.XmlAttribute[] anyAttrField;
/// <remarks/>
[System.Xml.Serialization.XmlAnyElementAttribute(Namespace = "", Order = 0)]
public System.Xml.XmlElement[] Any
{
get
{
return this.anyField;
}
set
{
this.anyField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAnyAttributeAttribute()]
public System.Xml.XmlAttribute[] AnyAttr
{
get
{
return this.anyAttrField;
}
set
{
this.anyAttrField = value;
}
}
}
创建简单的程序,将对象序列化为字符串,然后将该字符串反序列化回对象:
static void Main(string[] args)
{
var example = new ErrorDeclarationExtensionType();
var doc = new XmlDocument();
doc.LoadXml("<testXML2 xmlns=\"urn:testXML2\">anyContents0</testXML2>");
var test = doc.DocumentElement;
var array = new XmlElement[]
{
test
};
example.Any = array;
var sw = new StringWriter();
XmlTextWriter tw = null;
var xmlSerializer = new XmlSerializer(example.GetType());
tw = new XmlTextWriter(sw);
xmlSerializer.Serialize(tw, example);
Console.WriteLine(sw.ToString());
Console.ReadKey();
ErrorDeclarationExtensionType errorDeclaration;
var xmlSer = new XmlSerializer(typeof(ErrorDeclarationExtensionType));
using (TextReader tr = new StringReader(sw.ToString()))
{
errorDeclaration = (ErrorDeclarationExtensionType)xmlSer.Deserialize(tr);
}
Console.ReadKey();
}
反序列化后,所有字段的get对象都等于null。猜猜这是 XmlAnyElementAttribute 的问题,但没有得到任何解决方案。实际上这个类是prod中使用的其他类的属性,但在这种情况下有同样的错误。
【问题讨论】:
标签: c# xml serialization deserialization svcutil.exe