如何序列化/反序列化一个C#WCF DataContract /从XML [英] How to serialize/deserialize a C# WCF DataContract to/from XML

查看:336
本文介绍了如何序列化/反序列化一个C#WCF DataContract /从XML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发将由多个不同的客户端应用程序使用WCF服务。为了使一个官能工作时,服务器需要读取XML文件成C#DataContract其然后在给相关的客户端通过。据我从MSDN网站了解,这是可能的,但我找不到任何一个完整的例子。特别是关于流参数的网站谈判,我不完全得到呢。



我的数据契约都有一个属性字段这是另一个数据列表合同里面有多个简单属性字段。



例如

  [DataContract ] 
公共类MyClass1的{
[数据成员]
公共字符串名称;
[数据成员]
公众诠释年龄;
}

[DataContract]
公共类MyClass2 {
[数据成员]
公开名单< MyClass1的> myClass1List;
}



我的课是这个样子。


< DIV CLASS =h2_lin>解决方案

下面是一个例子。

  MyClass1的OBJ =新MyClass1的( ); 
DataContractSerializer的DCS =新的DataContractSerializer(typeof运算(MyClass1的));

使用(流流=新的FileStream(@C:\tmp\file.xml,FileMode.Create,FileAccess.Write))使用
{
(作家的XmlDictionaryWriter =
XmlDictionaryWriter.CreateTextWriter(流Encoding.UTF8))
{
writer.WriteStartDocument();
dcs.WriteObject(作家,OBJ);
}
}






 图书b =新的图书(); 

DataContractSerializer的DCS =新的DataContractSerializer(typeof运算(书籍));


{
流FS =新的FileStream(@C:\Users\temelm\Desktop\XmlFile.xml,FileMode.Create,FileAccess的。写);

的XmlDictionaryWriter XDW = XmlDictionaryWriter.CreateTextWriter(FS,Encoding.UTF8);
xdw.WriteStartDocument();
dcs.WriteObject(XDW,B);
xdw.Close();
fs.Flush();
fs.Close();
}
赶上(例外五)
{
S + = e.Message +\\\

}


I am developing a WCF service which will be consumed by multiple different client applications. In order to make one functionality work, the server needs to read an XML file into a C# DataContract which is then passed on to the concerned client. As far as I understand from the MSDN website, this is possible but I couldn't find any complete examples. In particular, the website talks about a 'stream' parameter which I don't quite get yet.

My data contract has one property field which is a list of another data contract which has multiple simple property fields.

e.g.

    [DataContract]
    public class MyClass1 {
        [DataMember]
        public string name;
        [DataMember]
        public int age;
    }

    [DataContract]
    public class MyClass2 {
        [DataMember]
        public List<MyClass1> myClass1List;
    }

My classes look something like this.

解决方案

Here is an example

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";
}

这篇关于如何序列化/反序列化一个C#WCF DataContract /从XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆