我有以下情况,我无法找到解决方案:
我有多个通过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:为什么微软最终会遇到如此困难的序列化组件?
答案 0 :(得分: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; }
}