0

我有一个域类用户,它至少有 20 个属性,它来自另一个库,所以它没有任何合同装饰。当我通过 WCF 服务将其作为 xml 或 json 返回时,它只会带回 3 个属性。我想也许它遗漏了集合和诸如此类的东西,但即使是像名称和电子邮件这样的简单字段也根本没有被返回。

所以我想我的问题是,有人可以解释到底是什么被序列化并通过服务返回吗?所有属性都没有用 [DataMember] 之类的东西装饰,但有些属性被序列化并返回,而另一些则没有。据我了解,它应该自动序列化所有公共属性。另一方面,如果有人能指出如何将这些声明添加到现有库以协助序列化的正确方向,我将不胜感激。

更新:我正在查看 wsdl 并找到对 xsd 文件的引用(假设由序列化程序生成)。我注意到我只列出了这 3 个 [映射] 字段。不知道这是什么,或者我是否可以弄乱它。

4

2 回答 2

1

事实证明,这些属性没有序列化的原因是因为它们不是完全公开的,因为它们是只读的。我实际上将属性设置为:

public string MyProperty { get; internal set; }

我这样做是因为我确实在我的内部系统类(控制器类型的东西)中使用了对象初始化器,并且不希望允许消费者设置这些属性。我读到你可以将它们设置为受保护的,它会允许它序列化,但这对我的实现不起作用。

这些是 POCO 类,所以我的解决方案(尽管不完全是问题的答案)是创建 DTO 类。由于 DTO 中的所有属性都是完全公开的,所以我所做的就是使用来自 POCO 的数据填充这些属性并返回 dto。一切都得到正确序列化。

于 2012-09-04T17:46:09.057 回答
0

看看你的域类,看看它是否继承自另一个类。如果是,则 User 类可能只有您看到的三个属性。

我发现效果很好的是创建一个特殊的服务模型(或视图模型)作为公共数据接口,而不是域模型的直接接口。作为一个好处,您可以更好地控制可能暴露的数据 - 您可以限制意外数据泄漏的风险,并优化通过网络发送的数据。

祝你好运!

于 2012-08-31T17:49:18.313 回答