[英]Namespace in WCF DataContract with Xml deserialization
我一直在谷歌搜索和原型设计没有成功这个想法,并想检查它是否可能。 我已经设置了WCF服务器客户端。
我有一个datacontracts和datamembers的对象。 我在客户端进行脱盐。 该方法也在客户端上。
[Serializable]
[DataContract (Namespace = "www.doesnotmatter.com")]
[XmlRoot("home")]
public partial class BaseModel
{
[DataMember(IsRequired = false)]
public string prop1
{ get; set; }
[DataMember(IsRequired = false)]
public string prop2
{ get; set; }
[DataMember(IsRequired=false)]
public string prop3
{ get; set; }
}
我试图从xml反序列化到一个对象,下面的方法是我的函数
public T FromXmlString<T>()
{
var reader = new StringReader(xmlConfiguration);
var serializer = new XmlSerializer(typeof(T), "www.doesnotmatter.com");
var instance = (T)serializer.Deserialize(reader);
reader.Dispose();
return instance;
}
xml是
<home>
<prop1>aaaaa</prop1>
<prop2>bbbbb</prop2>
<prop3>cccccc</prop3>
</home>
我一直在收到错误
InnerException = {"<Task xmlns=''> was not expected."}
所以我正在使用上面的XML并希望反序列化到上面的BaseModel。 编辑:
基础Model对象位于服务器上,我在客户端上并且具有我想要反序列化到给定对象(BaseModel)的XML。 我认为这是一个名称空间问题,它无法正确地从xml反序列化到对象中,但我不确定。
我真的不确定问题是什么,有谁能看到它?
将第二个参数更改为序列化程序为空字符串:
var serializer = new XmlSerializer(typeof(BaseModel), "");
本单元测试通过:
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Xml.Serialization;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace TestProject1
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var xml = @" <home>
<prop1>aaaaa</prop1>
<prop2>bbbbb</prop2>
<prop3>cccccc</prop3>
</home>";
var reader = new StringReader(xml);
var serializer = new XmlSerializer(typeof(BaseModel), "");
var instance = (BaseModel)serializer.Deserialize(reader);
Assert.AreEqual("aaaaa", instance.prop1);
Assert.AreEqual("bbbbb", instance.prop2);
Assert.AreEqual("cccccc", instance.prop3);
}
}
[Serializable]
[DataContract(Namespace = "www.doesnotmatter.com")]
[XmlRoot("home")]
public partial class BaseModel
{
[DataMember(IsRequired = false)]
public string prop1
{ get; set; }
[DataMember(IsRequired = false)]
public string prop2
{ get; set; }
[DataMember(IsRequired = false)]
public string prop3
{ get; set; }
}
}
可能是该类已经有一个您无法正确覆盖的XML根目录。 由于信息不多,很难说清楚。
尝试
var serializer = new XmlSerializer(typeof(T), new XmlRootAttribute("home"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.