【发布时间】:2014-04-18 13:06:05
【问题描述】:
我需要反序列化这个 xml(我无法更改):
<foo:a xmlns:foo="http://example.com">
<b>string</b>
</foo:a>
我做了这门课:
[DataContract(Name = "a", Namespace = "http://example.com")]
public class A
{
[DataMember(Name = "b", Order = 0)]
public string B;
}
我做到了:
using (var streamObject = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
{
var ser = new DataContractSerializer(typeof(A));
return (A)ser.ReadObject(streamObject);
}
我得到了一个 A 类的对象,但是 B 的内容总是空的。我知道如果 xml 使用<foo:b>string</foo:b>,它会起作用,但事实并非如此。如何反序列化没有命名空间的 DataMember?
【问题讨论】:
-
好一个。一定要使用 DataContract 序列化吗?
-
您可以在 datacontract 属性中删除所有
Namespace = ""的命名空间。那么你最终会得到 和 -
@Andrew,xml 不会反序列化
-
对不起,我以为他也用这个类来创建xml
-
@d_z 不,我不必...但它会为我省去一些麻烦(例如:我使用 DataContractSerializer 为应用程序做了所有其他事情,包括肥皂和 json)。我不喜欢以不同的方式混合处理 this 和 json。
标签: c# xml namespaces datacontractserializer datamember