【发布时间】:2017-06-29 10:57:36
【问题描述】:
是否有可能在 ASP.NET Web API 中定义只应序列化公共成员或只应序列化属性?
背景是:我们将每个属性的初始值存储在自己的私有字段中(参见下面的示例)。现在的问题是这些字段在我们的 Rest Application 中也是序列化的,但这并没有真正的用处,因为这个 API 主要由外部客户使用。删除 DataMember 属性也不是一个选项,因为我们还有 WCF 服务,这些字段需要序列化和传输。
[DataMember]
private bool seasonNameIsInitialized;
[DataMember]
private string seasonName;
[DataMember]
private string seasonNameInitial;
/// <summary>
/// Season Name
/// </summary>
[Required]
[MaxLength(100)]
[Display(ResourceType = typeof(ResourcesModel), Name = nameof(ResourcesModel.SeasonName))]
[DatabaseColumn(Name = "BEZ")]
[DataMember]
public string SeasonName
{
get
{
return seasonName;
}
set
{
string oldSeasonName = seasonName;
seasonName = value;
if (seasonNameIsInitialized)
{
OnPropertyChanged(oldSeasonName, seasonName);
}
else
{
seasonNameInitial = value;
seasonNameIsInitialized = true;
}
}
}
【问题讨论】:
-
不同的 API,不同的 DTO。您不能创建 一个 DTO 来处理自相矛盾的要求。有人说你的 API 模型不是你的资源模型不是你的域模型不是你的 DTO 模型不是你的数据模型
-
@jdwen XML Serializer 属性与 Web API 有什么关系?
-
在 SOAP 中使用字段进行序列化也不是一个好主意。 client 或 server 关心以前的值或更改通知?这只是一个 DTO,而不是域实体。您是否尝试对所有 API 使用与域实体和 DTO 相同的类?
-
@PanagiotisKanavos:但这两个模型完全一样,除了某些字段的 DataMember 属性。由于我们有数百个模型类,因此需要做很多工作。这对我们来说不是一个真正的选择。有没有可能影响 Web API 中序列化的成员?
-
所以这两个模型根本不一样。听起来您确实尝试对显示、WCF 和 Web API 使用相同的实体。
OnPropertyChanged对 WCF DTO 没有任何意义。您是否在服务器和桌面上使用相同的类?
标签: c# json wcf asp.net-web-api serialization