【问题标题】:"xmlns=''> was not expected" while deserializing to object (on some computers)反序列化为对象时出现“xmlns=''> 不是预期的”(在某些计算机上)
【发布时间】:2024-01-11 10:09:01
【问题描述】:

我正在尝试反序列化 XML。我的系统在开发环境中也没有问题。或运行时。我的 QA 分析师也没有问题。但是,在客户端站点,我们收到以下错误:

XML 文档中存在错误。 System.InvalidOperationException:不是预期的。 在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderCrashEntity.Read74_CrashEntity() 在 System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader,字符串 encodingStyle,XmlDeserializationEvents 事件) 在 Utility.XML.XMLUtility.DeserializeObject(字符串 XML,类型 ObjectType) 在 DirectoryFramework.ImportData()

在客户端站点上但在 dev/qa 环境中没有导致此问题的原因是什么?

源XML(小sn-p):

<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;
}

目标类sn-p:

[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,它仍然可以正常工作。

【问题讨论】:

  • 为什么是 XSLT 的标签?
  • 很抱歉。删除它并添加“反序列化”

标签: c# exception deserialization xml-namespaces


【解决方案1】:

对此误报深表歉意。我注意到目标实体被错误地选择为产品安装的一部分。在我使用安装程序逐行检查安装配置后,我注意到该实体用于 Crash,而不是 Incident。一旦设置了正确的实体,反序列化就像一个魅力。

经验教训...当出现意外错误时,不要假设其他人正确安装了产品。

【讨论】: