通过设置XmlRoot从Stream序列化Xml仍然会抛出异常

时间:2013-04-15 14:40:01

标签: xml xml-serialization datacontractserializer

我有一个如下定义的类:

[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'的'元素',命名空间''。“

我可能遗漏了一些简单的东西,但我原以为如果我定义了XmlRoot,这会覆盖推断的根元素Location。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

相关问题