当xml删除了名称空间后,如何将xml反序列化为数据契约?

本文关键字:xml 反序列化 数据 契约 删除 空间 | 更新日期: 2023-09-27 18:13:19

我将wcf请求和响应序列化为XML,但为了节省数据库空间,我去掉了所有不必要的信息,因此结果是:

<someObject>
  <someValue>10</someValue>
</someObject>

还有更复杂的嵌套属性,上面只是一个例子。

当我尝试反序列化时,我得到一个错误,说期望someObject, someNamespace但遇到someObject, ''

byte[] data = System.Text.Encoding.UTF8.GetBytes(xmlString);
stream.Write(data, 0, data.Length);
stream.Position = 0;
DataContractSerializer deserializer = new DataContractSerializer(typeof(T));
return deserializer.ReadObject(stream) as T;

有简单的方法来解决这个问题吗?也许不使用DataContractSerializer ?

当xml删除了名称空间后,如何将xml反序列化为数据契约?

我知道这篇文章已经发布一周了,但如果你已经找到了解决方案,它可能会对你有所帮助。

如果事先知道结构,可以使用XmlSerializer类。

string xml = "<someObject>" +
             "  <someValue>10</someValue>" +
             "</someObject>";
using (TextReader reader = new StringReader(xml))
{
    XmlSerializer serializer = new XmlSerializer(typeof(someObject));
    var obj = serializer.Deserialize(reader);
}

下面是将其反序列化成的支持类:

[Serializable()]
public class someObject
{
    [XmlElement("someValue")]
    public string someValue { get; set; }
}

对于更复杂的XML,您必须修改正在使用的类。你可以嵌套类,也可以支持数组/列表。