繁体   English   中英

WCF DataContract中的命名空间,带有Xml反序列化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM