【问题标题】:Serializing Xml from Stream by Setting XmlRoot still throws Exception通过设置 XmlRoot 从 Stream 序列化 Xml 仍然抛出异常
【发布时间】:2013-04-15 14:40:01
【问题描述】:

我有一个如下定义的类:

[XmlRoot(ElementName="state_territories")]
public class Location
{
    ...
}

我正在检索的 XML(从流中提取并使用写入器写入调试器)是:

<?xml version='1.0' encoding='utf-8' ?><state_territories>...</state_territories>

但是,当我尝试序列化我的 XML 响应时,例如:

var serializer = new DataContractSerializer(typeof(Location));
Locations = serializer.ReadObject(response.GetResponseStream()) as Location;

我收到以下异常:

"期待命名空间中的元素“位置” 'http://schemas.datacontract.org/2004/07/App.Data.Territories'。 遇到名为 'state_territories'、命名空间 '' 的 'Element'。”

我可能遗漏了一些简单的东西,但我认为如果我定义 XmlRoot,这将覆盖推断的根元素位置。

有什么想法吗?

【问题讨论】:

    标签: xml xml-serialization datacontractserializer


    【解决方案1】:

    [XmlRoot(...)] 仅由XmlSerializer 处理:

    var serializer = new XmlSerializer(typeof(Location));
    Locations = (Location) serializer.Deserialize(response.GetResponseStream());
    

    如果您正在处理常规 xml 并且需要控制名称/属性等,那么XmlSerializer 是最佳选择; DataContractSerializer 仅提供对 xml 映射的最小控制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多