问题
当反序列化XML时,我遇到了一个问题,其中一个子元素没有被反序列化。它在类实例中为空,尽管它被填充在XML中。
有点背景
我用
XsdObjectGenerator
基于my.xsd创建poco类。然后,我能够将XML反序列化为类实例并处理对象。
我通过将自动生成的类包装在一个名为“tfs”的命名空间中来修改它们。
在项目的某一点上,我发现有必要将一个子元素放在它自己的名为“com”的命名空间中。
下一次我试图将XML反序列化到类实例中时,没有反序列化子元素。
下面是将子元素命名空间更改为com的相关tfs类代码片段。它还包括保留在tfs命名空间中的父元素orddtl。
[XmlRoot(ElementName="OrdDtl",Namespace=Declarations.SchemaVersion,IsNullable=false),Serializable]
public class OrdDtl
{
[XmlElement(Type=typeof(COM.AcctSetup), ElementName="AcctSetup", IsNullable=false, Form=XmlSchemaForm.Qualified, Namespace = Declarations.SchemaVersion)]
[EditorBrowsable(EditorBrowsableState.Advanced)]
public COM.AcctSetup __AcctSetup;
[XmlIgnore]
public COM.AcctSetup AcctSetup
{
get
{
if (__AcctSetup == null) __AcctSetup = new COM.AcctSetup();
return __AcctSetup;
}
set {__AcctSetup = value;}
}
以下是COM命名空间中的acctsetup声明,它包含在自己的文件中:
[XmlRoot(ElementName = "AcctSetup", Namespace = Declarations.SchemaVersion, IsNullable = false), Serializable]
public class AcctSetup
{
......
}
下面是我的反序列化函数:
public static T XMLStringToXMLObject<T>(string pXmlString)
{
T retVal = default(T);
try
{
XmlSerializer vSerializer = new XmlSerializer(typeof(T));
MemoryStream vMemoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlString));
XmlTextWriter vXmlTextWriter = new XmlTextWriter(vMemoryStream, Encoding.UTF8);
retVal = (T)vSerializer.Deserialize(vMemoryStream);
}
catch (System.Exception ex)
{
if (ExceptionMain.LogException(ex))
throw;
}
return retVal;
}
非常感谢您在获取com.acctsetup元素进行反序列化方面提供的任何帮助。如果您需要其他信息或代码示例,请通知我。