我正在try 反序列化从服务获取的XMLIM. 但XmlSerializer在遇到第一个属性时失败.

我的缩短的XML如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:basicInformation xmlns:ns2="http://fu.bar.com/">
   <somenode>...</somenode>
   ...
</ns2:basicInformation>

我的班级看起来像这样

[XmlRoot(ElementName = "basicInformation")]
public class BasicInformation
{
  [XmlElement(ElementName = "somenode")]
  public string SomeNode { get; set; }

  ...

  [XmlAttribute(AttributeName = "ns2")]
  public string Ns2 { get; set; }

  [XmlText]
  public string Text { get; set; }
}

我得到的错误是:

"There is an error in XML document (1, 57)."}
Data: {System.Collections.ListDictionaryInternal}
HResult: -2146233079
HelpLink: null
InnerException: {"<basicInformation xmlns='http://message.async.dms.svap.deere.com/'> was not expected."}
Message: "There is an error in XML document (1, 57)."
Source: "System.Xml"
StackTrace: "   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)\r\n   at System.Xml.Serialization.XmlSerializer.Deserialize(TextReader textReader)\r\n   at AzureQueue.Program.Blurg() in E:\\_Code_\\Testing\\AzureQueue\\AzureQueue\\Program.cs:line 432\r\n   at AzureQueue.Program.<DoSomething>d__1.MoveNext() in E:\\_Code_\\Testing\\AzureQueue\\AzureQueue\\Program.cs:line 71"
TargetSite: {System.Object Deserialize(System.Xml.XmlReader, System.String, System.Xml.Serialization.XmlDeserializationEvents)}

如果我将XAML中的第二行替换为:

<ns2:basicInformation xmlns:ns2="http://fu.bar.com/">

对此:

<basicInformation>

一切都很正常.

所以这是我没有正确处理的那个属性的东西,但我还没有找到解决方案.

我应该提到的是,C#类是从xml到c#工具生成的,因为完整的xml是巨大的.

那么我错过了什么呢?我可以用非常难看的方法解决这个问题,然后替换一个字符串,但这感觉非常错误!;)

Update

我已经接受了@Marc Gravell的回答,它奏效了. 但我 Select 使用@Denis Michel解决方案,因为它解决了我的问题,而不必在我的c#模型中的所有XML node 上放置名称空间

推荐答案

[XmlRoot(ElementName = "basicInformation", Namespace = "http://fu.bar.com/")]
public class BasicInformation

您的数据是名称空间限定的,这一点很重要.您可能也需要将这一点单独应用于子元素,但是:请接受这一点.

Csharp相关问答推荐

如何使用Microsoft Curve API从搜索的文件中获取内容(文本)?

react 式扩展连接中的非交叉LeftDurationTimeout

并行令牌更新

. NET在上一个操作完成之前,在此上下文实例上启动了第二个操作

此反射有什么问题.是否发送值转换委托?

静态对象构造顺序

为什么EventInfo.EventHandlerType返回可为空的Type值?

如何将MongoDB序列化程序设置为内部对象属性

使用泛型可空类实现接口

是否由DI容器自动处理由ActivatorUilties.CreateInstance()创建的服务?

数据库.Migrate在对接容器重启时失败

如何强制新设置在Unity中工作?

System.NotSupportdException:流不支持读取

Azure函数正在返回值列表,但该列表在Chrome中显示为空

为什么连接到Google OAuth2后,结果.Credential为空?

Azure队列触发器未使用隔离的工作进程执行

与另一个对象位于同一位置的对象具有不同的变换位置

如何使用moq和xUnit对删除操作进行单元测试?

CsvHelper在第二次迭代时抛出System.ObjectDisposedException

C#If条件格式