2012-10-31 54 views
1

数据合同序列化我有以下情形,我无法找到一个解决方案:为对象数组

我有通过svcutil.exe工具生成多个数据合同proxys。我试图序列化包含数据合约代理实例的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); 

编辑:(要futher形容我的设置)

我已经把下面的数据契约属性:

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

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

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

+0

'DataContract'命名空间和生成的C#.NET类名称空间是不同的东西。 – Paciv

+0

@Paciv,当然 - 我从来没有说他们是:) – Fdr

+0

而你的问题是你持有来自不同的生成代理的数组对象? – Paciv

回答

1

您通过修饰您的DataContractClass与attributes来为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; } 
} 
+0

看我的编辑。生成的代理具有与用于生成它们的类不同的命名空间 - 这似乎会导致DataContractSerializer出现问题。 – Fdr

+0

为什么不能在DataContract类中拥有相同的名称空间? –