【问题标题】:Data contract serialization for object array对象数组的数据契约序列化
【发布时间】:2012-10-20 20:25:20
【问题描述】:

我有以下情况,但我无法找到解决方案:

我有多个通过svcutil.exe 工具生成的数据合约代理。我正在尝试序列化包含数据合约代理实例的object[] 实例。尝试以下:

public static string Serialize<T>(T obj)
{
   StringBuilder sb = new StringBuilder();
   var known = new List<Type>(){typeof(myDataContracClass), typeof(object[])};
   DataContractSerializer ser = new DataContractSerializer(typeof(T), known );
   ser.WriteObject(XmlWriter.Create(sb), obj);
   return sb.ToString();
}

然后通过以下方式使用它:

object[] arrayToSerialize = new object[] { someGuid, myDatacontractProxyInstance};
var serialized = Serialize(arrayToSerialize);

编辑:(进一步描述我的设置)

我放置了以下数据合约属性:

[DataContract(Namespace = "http://mynamespace-uri")]

在 svcutil.exe 的代理生成中,我声明了命名空间/n:*,My.Custom.Namespace,这导致生成的代理具有与数据协定类不同的命名空间。

Offtopic:为什么微软最终会推出如此困难的序列化组件?

【问题讨论】:

  • DataContract 命名空间和生成的 C#.NET 类命名空间是不同的东西。
  • @Paciv,当然 - 我从来没有说过他们是 :)
  • 你的问题是你的数组对象来自不同的生成代理?

标签: c# wcf serialization svcutil.exe


【解决方案1】:

您通过使用attributes 装饰您的DataContractClass 来给DataContractSerializer 提示。

试试这个:

[TestFixture]
public class DataContractSerializerTests
{
    [Test]
    public void ArrayOfObjectsTest()
    {
        var dataContracClass = new DataContractClass() 
            { 
               Objects = new object[] { "Johan", 1 } 
            };
        StringBuilder sb = new StringBuilder();
        DataContractSerializer ser = new DataContractSerializer(dataContracClass.GetType());

        using (XmlWriter xmlWriter = XmlWriter.Create(sb))
        {
            ser.WriteObject(xmlWriter,dataContracClass);
        }
        string s = sb.ToString();
    }
}

下面是一个类,其属性指定如何序列化该类。

[DataContract]
public class DataContractClass
{
    [DataMember]
    public object[] Objects { get; set; }
}

【讨论】:

  • 查看我的编辑。生成的代理具有与用于生成它们的类不同的命名空间 - 这似乎会导致 DataContractSerializer 出现问题。
  • 为什么不能在 DataContract 类中拥有相同的命名空间?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2015-08-10
  • 2014-02-22
  • 1970-01-01
相关资源
最近更新 更多