我有一个如下定义的类:
[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。
有什么想法吗?
答案 0 :(得分:1)
[XmlRoot(...)]
仅由XmlSerializer
处理:
var serializer = new XmlSerializer(typeof(Location));
Locations = (Location) serializer.Deserialize(response.GetResponseStream());
如果您正在处理常规xml并且需要控制名称/属性等,那么XmlSerializer
是最佳选择; DataContractSerializer
仅提供对xml映射的最小控制。