如何序列化/反序列化 C# WCF DataContract 到 XML
Posted
技术标签:
【中文标题】如何序列化/反序列化 C# WCF DataContract 到 XML【英文标题】:How to serialize/deserialize a C# WCF DataContract to/from XML 【发布时间】:2012-06-23 22:20:36 【问题描述】:我正在开发一个 WCF 服务,它将被多个不同的客户端应用程序使用。为了使一项功能正常工作,服务器需要将 XML 文件读入 C# DataContract,然后将其传递给相关客户端。据我从 MSDN 网站了解,这是可能的,但我找不到任何完整的示例。特别是,该网站谈到了一个我还不太了解的“流”参数。
我的数据合约有一个属性字段,它是另一个数据合约的列表,该数据合约具有多个简单的属性字段。
例如
[DataContract]
public class MyClass1
[DataMember]
public string name;
[DataMember]
public int age;
[DataContract]
public class MyClass2
[DataMember]
public List<MyClass1> myClass1List;
我的课程看起来像这样。
【问题讨论】:
重复:***.com/questions/4858798/… 【参考方案1】:这是一个例子
MyClass1 obj = new MyClass1();
DataContractSerializer dcs = new DataContractSerializer(typeof(MyClass1));
using (Stream stream = new FileStream(@"C:\tmp\file.xml", FileMode.Create, FileAccess.Write))
using (XmlDictionaryWriter writer =
XmlDictionaryWriter.CreateTextWriter(stream, Encoding.UTF8))
writer.WriteStartDocument();
dcs.WriteObject(writer, obj);
Books b = new Books();
DataContractSerializer dcs = new DataContractSerializer(typeof(Books));
try
Stream fs = new FileStream(@"C:\Users\temelm\Desktop\XmlFile.xml", FileMode.Create, FileAccess.Write);
XmlDictionaryWriter xdw = XmlDictionaryWriter.CreateTextWriter(fs, Encoding.UTF8);
xdw.WriteStartDocument();
dcs.WriteObject(xdw, b);
xdw.Close();
fs.Flush();
fs.Close();
catch (Exception e)
s += e.Message + "\n";
【讨论】:
@KirkWoll这对你很有用。当您需要 XElement 时。例如,当您将节点附加到 XDocument 或替换此文档的 XElement 时。
private XElement objectToXElement(SomeContractType obj)
DataContractSerializer dcs = new DataContractSerializer(typeof(SomeContractType);
var ms = new MemoryStream();
var xw = XmlWriter.Create(ms);
dcs.WriteObject(xw, obj);
xw.Flush();
xw.Close();
ms.Position = 0;
XElement xe = XElement.Load(ms);
return xe;
【讨论】:
【参考方案3】:NetDataContractSerializer 解决了使用 WCF 时的一大堆问题。
请看这里MSDN NetDataContractSerializer
它通常用于包装各种对象并通过 WCF 传递。
您可以使用它将对象包装到 byte[]
中并通过 WCF 传输它,
在服务器端,您可以轻松地反序列化对象并做任何事情
你想和他们在一起。
下面是关于如何正确使用这个 Serializer 的讨论: MSDN Social
那里还提供了代码 sn-ps!
【讨论】:
WTF,德国微软网站的链接???你可能的意思是:msdn.microsoft.com/library/…以上是关于如何序列化/反序列化 C# WCF DataContract 到 XML的主要内容,如果未能解决你的问题,请参考以下文章
C# Restful WCF 服务。无法在帖子正文中反序列化 XML