3

我一直在谷歌搜索和原型设计,但没有成功,我想检查它是否可行。我已经设置了 WCF 服务器客户端。

我有一个带有数据合同和数据成员的对象。我正在对客户端进行脱盐。该方法也在客户端。

    [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 中。编辑:

基本模型对象位于服务器上,我在客户端上,并且有想要反序列化到给定对象(BaseModel)中的 XML。我认为这是一个命名空间问题,它无法正确地从 xml 反序列化到对象中,但不确定。

我真的不确定问题是什么,任何人都可以看到它吗?

4

2 回答 2

2

将序列化程序的第二个参数更改为空字符串:

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; }
    }
}
于 2012-09-07T15:49:01.820 回答
0

可能是该类已经有一个您未能正确覆盖的 XML 根。很难说,因为没有太多信息。

尝试

var serializer = new XmlSerializer(typeof(T), new XmlRootAttribute("home"));
于 2012-09-07T16:01:57.517 回答