如何使 TableEntity 序列化非 public 属性?
How to make TableEntity serialize non-public properties?
Azure Table 存储有一些令人沮丧的限制,比如无法处理 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 忽略了。有什么简单的技巧可以让它序列化非 public 成员(没有反射)?
我不知道有任何属性可用于序列化 TableEntity, but you can override ReadEntity and WriteEntity methods of interface ITableEntity 的 non-public 属性 以自定义您自己的 属性 序列化。
public class MyEntity : TableEntity
{
[IgnoreProperty]
public decimal ListPrice
{
get => decimal.Parse(this.ListPrice_, CultureInfo.InvariantCulture);
set => this.ListPrice_ = value.ToString(CultureInfo.InvariantCulture);
}
private string ListPrice_ { get; set; }
public override void ReadEntity(IDictionary<string, EntityProperty> properties, OperationContext operationContext)
{
this.ListPrice_ = properties[nameof(ListPrice)].StringValue;
}
public override IDictionary<string, EntityProperty> WriteEntity(OperationContext operationContext)
{
var properties = new Dictionary<string, EntityProperty>();
properties.Add(nameof(ListPrice), new EntityProperty(this.ListPrice_));
return properties;
}
}
Azure Table 存储有一些令人沮丧的限制,比如无法处理 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 忽略了。有什么简单的技巧可以让它序列化非 public 成员(没有反射)?
我不知道有任何属性可用于序列化 TableEntity, but you can override ReadEntity and WriteEntity methods of interface ITableEntity 的 non-public 属性 以自定义您自己的 属性 序列化。
public class MyEntity : TableEntity
{
[IgnoreProperty]
public decimal ListPrice
{
get => decimal.Parse(this.ListPrice_, CultureInfo.InvariantCulture);
set => this.ListPrice_ = value.ToString(CultureInfo.InvariantCulture);
}
private string ListPrice_ { get; set; }
public override void ReadEntity(IDictionary<string, EntityProperty> properties, OperationContext operationContext)
{
this.ListPrice_ = properties[nameof(ListPrice)].StringValue;
}
public override IDictionary<string, EntityProperty> WriteEntity(OperationContext operationContext)
{
var properties = new Dictionary<string, EntityProperty>();
properties.Add(nameof(ListPrice), new EntityProperty(this.ListPrice_));
return properties;
}
}