我知道,一个私人无参构造的工作,但是怎么样的一个目没有无参造?

我想让类型,从一个第三方图书馆,所以我无法控制的种类型的定义。

如果有一个方式是什么,是最简单的?E.g。我没什么必须创建一个子类型。

编辑:

我在寻找什么东西喜欢的等级定制下所示: http://msdn.microsoft.com/en-us/magazine/cc163902.aspx 虽然我不想要流serialize/deserialize.

有帮助吗?

解决方案

你真的不能让任意的类型序列化;在某些情况下(XmlSerializer, 例如)运行时公开的选择欺骗的属性。但 DataContractSerializer 不允许这样做。可行的选择:

  • 隐藏在课后你自己的类型 序列化的(大量的工作)
  • 提供的二元格式化的代理人(yeuch)
  • 写你自己的化的核心(很多工作要得到的权利)

实际上,如果东西是不是 设计 对于化,很小的框架 你serialize。

其他提示

我不是WCF专家,但它们不太可能支持具有任意类型的构造函数的序列化。也就是因为他们会传递什么价值?您可以为结构的引用类型和空值传递null。但是,如果用完全空的数据构建一个类型会有什么好处呢?

我认为你坚持使用2个选项之一

  1. 子类有问题的类型,并将适当的默认值传递给非无参数构造函数
  2. 创建一个存在用于序列化的类型。完成后,它可以创建您感兴趣的原始类型的实例。它是各种各样的桥梁。
  3. 我个人会选择#2。使类成为仅数据结构并针对序列化和工厂目的进行优化。

我刚刚运行了一个小测试,使用WCF服务返回一个没有默认构造函数的基本对象。

//[DataContract]
//[Serializable]
public class MyObject
{
    public MyObject(string _name)
    {
        Name = _name;
    }

    //[DataMember]
    public string Name { get; set; }

    //[DataMember]
    public string Address { get; set; }
}

这是服务的样子:

public class MyService : IMyService
{
    #region IMyService Members

    public MyObject GetByName(string _name)
    {
        return new MyObject(_name) { Address = "Test Address" };
    }

    #endregion
}

只要MyObject是[DataContract]或[Serializable],这实际上是有效的。有趣的是,它似乎不需要客户端的默认构造函数。这里有一个相关的帖子:

WCF反序列化如何实例化对象而不调用构造?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top