我知道私有无参数构造函数可以工作,但是没有无参数构造函数的对象呢?
我想公开来自第三方库的类型,因此我无法控制类型定义。
如果有什么方法最简单的?例如。我不需要创建子类型。
编辑:
我正在寻找的是类似于此处显示的自定义级别:http://msdn.microsoft.com/en-us/magazine/cc163902.aspx 虽然我不想使用流来序列化/反序列化。
答案 0 :(得分:5)
你不能真正使任意类型可序列化;在某些情况下(例如XmlSerializer
),运行时公开了欺骗属性的选项。但DataContractSerializer
不允许这样做。可行的选择:
基本上,如果某些内容不是设计的用于序列化,那么很少有框架会让对其进行序列化。
答案 1 :(得分:1)
我不是WCF专家,但它们不太可能支持具有任意类型的构造函数的序列化。也就是因为他们会传递什么价值?您可以为结构的引用类型和空值传递null。但是,如果用完全空的数据构建一个类型会有什么好处呢?
我认为你坚持使用2个选项之一
我个人会选择#2。使类成为仅数据结构并针对序列化和工厂目的进行优化。
答案 2 :(得分:1)
我刚刚运行了一个小测试,使用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],这实际上是有效的。有趣的是,它似乎不需要客户端的默认构造函数。这里有一个相关的帖子:
How does WCF deserialization instantiate objects without calling a constructor?