如何使 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;
    }
}