"xmlns=''> was not expected" 反序列化为对象时(在某些计算机上)
"xmlns=''> was not expected" while deserializing to object (on some computers)
我正在尝试反序列化 XML。我的系统在开发环境中都没有问题。或运行时。我的 QA 分析师也没有问题。但是,在客户端站点,我们收到以下错误:
There is an error in the XML document.
System.InvalidOperationException: was not expected.
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderCrashEntity.Read74_CrashEntity()
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
at Utility.XML.XMLUtility.DeserializeObject(String XML, Type ObjectType)
at DirectoryFramework.ImportData()
可能是什么原因导致客户端站点出现这种情况,但在 dev/qa 环境中却没有?
来源XML(小片段):
<CitationEntity>
<CitationNumber>E00C000006</CitationNumber>
<Agency>123456789</Agency>
<CaseNumber>1234456</CaseNumber>
</CitationEntity>
反序列化方法:
Type entListType = typeof(List<>).MakeGenericType(entType);
object entities = null;
try
{
entities = XMLUtility.DeserializeObject(outputXml, entListType);
}
catch (Exception ex)
{...}
public static Object DeserializeObject(String XML, Type ObjectType)
{
Object retval = null;
XmlSerializer serializer = new XmlSerializer(ObjectType);
XmlDocument doc = new XmlDocument();
doc.LoadXml(XML);
XmlNode node = doc.DocumentElement;
XmlReader readnode = new XmlNodeReader(node);
retval = serializer.Deserialize(readnode);
return retval;
}
目标 class 片段:
[DataContract, Serializable]
[ModuleCode("TC")]
[InvolvementDate("CitationDate")]
[MFRStatusHistoryModuleCode("TC")]
public partial class CitationEntity : Entities.baseEntity, INameEntity
{
[DataMember]
[DefaultValue("")]
public string Agency
{
get { return _Agency; }
set
{
if (value != _Agency)
{
_Agency = value;
OnPropertyChanged("Agency");
}
}
}
string _Agency;
[DataMember]
[DefaultValue("")]
public string CaseNumber
{
get { return _CaseNumber; }
set
{
if (value != _CaseNumber)
{
_CaseNumber = value;
OnPropertyChanged("CaseNumber");
}
}
}
string _CaseNumber;
[DataMember]
[DefaultValue("")]
public string CitationNumber
{
get { return _CitationNumber; }
set
{
if (value != _CitationNumber)
{
_CitationNumber = value;
OnPropertyChanged("CitationNumber");
}
}
}
string _CitationNumber;
}
我的计算机上安装了 .net Framework 4.7,客户端计算机上安装的是 4.0 左右。我认为这可能是问题所在。我们将客户端计算机更新为 4.8,但没有任何区别。我更新到 4.8,它仍然可以正常工作。
抱歉误报了。我注意到目标实体被错误地选择为产品安装的一部分。在我逐行检查安装程序的安装配置后,我注意到该实体用于崩溃,而不是事件。一旦设置了正确的实体,反序列化就非常有效。
经验教训...当出现意外错误时,不要假设其他人正确安装了产品。
我正在尝试反序列化 XML。我的系统在开发环境中都没有问题。或运行时。我的 QA 分析师也没有问题。但是,在客户端站点,我们收到以下错误:
There is an error in the XML document. System.InvalidOperationException: was not expected. at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderCrashEntity.Read74_CrashEntity() at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) at Utility.XML.XMLUtility.DeserializeObject(String XML, Type ObjectType) at DirectoryFramework.ImportData()
可能是什么原因导致客户端站点出现这种情况,但在 dev/qa 环境中却没有?
来源XML(小片段):
<CitationEntity>
<CitationNumber>E00C000006</CitationNumber>
<Agency>123456789</Agency>
<CaseNumber>1234456</CaseNumber>
</CitationEntity>
反序列化方法:
Type entListType = typeof(List<>).MakeGenericType(entType);
object entities = null;
try
{
entities = XMLUtility.DeserializeObject(outputXml, entListType);
}
catch (Exception ex)
{...}
public static Object DeserializeObject(String XML, Type ObjectType)
{
Object retval = null;
XmlSerializer serializer = new XmlSerializer(ObjectType);
XmlDocument doc = new XmlDocument();
doc.LoadXml(XML);
XmlNode node = doc.DocumentElement;
XmlReader readnode = new XmlNodeReader(node);
retval = serializer.Deserialize(readnode);
return retval;
}
目标 class 片段:
[DataContract, Serializable]
[ModuleCode("TC")]
[InvolvementDate("CitationDate")]
[MFRStatusHistoryModuleCode("TC")]
public partial class CitationEntity : Entities.baseEntity, INameEntity
{
[DataMember]
[DefaultValue("")]
public string Agency
{
get { return _Agency; }
set
{
if (value != _Agency)
{
_Agency = value;
OnPropertyChanged("Agency");
}
}
}
string _Agency;
[DataMember]
[DefaultValue("")]
public string CaseNumber
{
get { return _CaseNumber; }
set
{
if (value != _CaseNumber)
{
_CaseNumber = value;
OnPropertyChanged("CaseNumber");
}
}
}
string _CaseNumber;
[DataMember]
[DefaultValue("")]
public string CitationNumber
{
get { return _CitationNumber; }
set
{
if (value != _CitationNumber)
{
_CitationNumber = value;
OnPropertyChanged("CitationNumber");
}
}
}
string _CitationNumber;
}
我的计算机上安装了 .net Framework 4.7,客户端计算机上安装的是 4.0 左右。我认为这可能是问题所在。我们将客户端计算机更新为 4.8,但没有任何区别。我更新到 4.8,它仍然可以正常工作。
抱歉误报了。我注意到目标实体被错误地选择为产品安装的一部分。在我逐行检查安装程序的安装配置后,我注意到该实体用于崩溃,而不是事件。一旦设置了正确的实体,反序列化就非常有效。
经验教训...当出现意外错误时,不要假设其他人正确安装了产品。