【发布时间】:2018-08-03 16:22:51
【问题描述】:
Azure 表存储有一些令人沮丧的限制,例如无法处理 decimal 数据类型,所以我必须这样做:
public class MyEntity : TableEntity {
[IgnoreProperty]
public decimal ListPrice
{
get => decimal.Parse(this.ListPrice_, CultureInfo.InvariantCulture);
set => this.ListPrice_ = value.ToString(CultureInfo.InvariantCulture);
}
public string ListPrice_ { get; set; }
}
显然我不希望 ListPrice_ 成为 public 但 private 成员似乎被 SDK 忽略了。有什么简单的技巧可以让它序列化非公共成员(没有反射)?
【问题讨论】:
-
私有成员是私有的。类之外的任何东西都没有任何可见性,所以不,你不能序列化非公共成员(没有反射)
-
我相信这不是它应该如何工作的,它依赖于序列化。例如,如果我使用
DataContractSerializer,我可以将[DataMember]放在任何私人成员上,它会被处理得很好。作为开发人员,我们应该完全控制数据结构的序列化,不是吗? -
DataContractSerializer 使用反射...事实上所有的序列化器都使用反射
-
我不明白这一点。几乎我知道的任何序列化程序都允许处理非公共成员,如果不是默认情况下而是使用覆盖(基于属性或代码)。我不在乎他们是否在内部使用反射我不想在我的用户代码中使用它(如果我想要它,我会覆盖
WriteEntity()/ReadEntity()而不会打扰社区)。问题是我不知道 SDK 如何处理序列化以及它是否允许覆盖默认行为。我很高兴知道 SDK 中是否有选项标志或等效的[DataMember]可以用来装饰我的成员。
标签: c# .net azure serialization azure-table-storage