【问题标题】:WCF serialization codeWCF序列化代码
【发布时间】:2013-02-22 23:09:37
【问题描述】:

我刚刚启动了 WCF。我有一个关于序列化的问题。我知道 WCF 默认在幕后使用 DataContract 序列化。我在 Aaron Skonnard 的文章http://msdn.microsoft.com/en-us/magazine/cc163569.aspx 中查看了一些在线代码。下面的代码来自他的文章。在此,他编写了序列化 Person 对象的代码。我的问题是 WCF 不会在幕后执行此操作。为什么一定要写序列化逻辑?然后再次反序列化它。作为 WCF 初学者,我对何时编写此代码以及何时不编写感到困惑。我认为如果没有编写序列化逻辑,这将正常工作。感谢您的帮助!

static void WriterPersonSerializable()
{

Person p = new Person("Bob", 34, "secret");

p.spouse = new Person("Jane", 33, "secret");

using (FileStream fs = new FileStream("person.xml", FileMode.Create))
using (XmlDictionaryWriter writer =
    XmlDictionaryWriter.CreateTextWriter(fs))
{
    DataContractSerializer serializer =
        new DataContractSerializer(typeof(Person));
    serializer.WriteObject(writer, p);
}

【问题讨论】:

  • 您不必编写任何此类代码。您只需使用 DataContract 和 DataMember 属性来告诉 WCF 您希望如何序列化 Person 对象。 WCF 在幕后使用 DataContractSerializer 为您进行序列化。那篇文章向您展示了 WCF 的内部工作原理,因此他提供了 WCF 用于执行序列化的代码(粗略地说)。
  • 太棒了,这很有道理。谢谢。

标签: wcf serialization deserialization


【解决方案1】:

您不必这样做。当然,您可以设置自己的序列化。但是默认情况下,如果你只用 [DataContract] 属性标记你的类,用 [DataMember] 属性标记类的属性就可以了。之后,您需要做的就是告知您的服务应该能够在 [ServiceKnownType] 属性中序列化/反序列化哪些类。就是这样,一切都会开箱即用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-12
    • 2017-08-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多