Rob*_*ert 8 c# xml wcf datacontract
我正在为WCF服务开发一种"存储转发"应用程序.我想将消息作为原始XML blob保存在数据库中,作为XElement.我在将datacontract转换为数据库调用所需的XElement类型时遇到了一些麻烦.有任何想法吗?
jas*_*nmw 12
这会将其作为字符串返回,您可以将其放入db中的xml列中.这是一个很好的通用方法,可用于序列化数据交换.
public static string Serialize<T>(T obj)
{
    StringBuilder sb = new StringBuilder();
    DataContractSerializer ser = new DataContractSerializer(typeof(T));
    ser.WriteObject(XmlWriter.Create(sb), obj);
    return sb.ToString();
}
顺便问一下,你使用linq来sql吗?我问的原因是因为问题的XElement部分.如果是这种情况,您可以在.dbml设计器中修改它以使用字符串作为CLR类型,而不是默认的XElement.
答案最多(Jason W.发布)对我不起作用.我不知道为什么这个答案获得了最多的选票.但搜索后我发现了这个
http://billrob.com/archive/2010/02/09/datacontractserializer-converting-objects-to-xml-string.aspx
这适用于我的项目.我只是有一些类,并将datacontract和datamemeber属性放在类和属性上,然后想要获得一个XML字符串,我可以写入数据库.
来自上面链接的代码变为404:
连载:
var serializer = new DataContractSerializer(tempData.GetType());
using (var backing = new System.IO.StringWriter())
using (var writer = new System.Xml.XmlTextWriter(backing))
{
    serializer.WriteObject(writer, tempData);
    data.XmlData = backing.ToString();
}
反序列化:
var serializer = new DataContractSerializer(typeof(T));
using (var backing = new System.IO.StringReader(data.XmlData))
using (var reader = new System.Xml.XmlTextReader(backing))
{
    return serializer.ReadObject(reader) as T;
}