使用C#getter属性反复进行反序列化

时间:2018-08-30 02:07:58

标签: c# json getter-setter

internal class Program
{
    private static void Main(string[] args)
    {

        var sourceJson2 = "{\"bizType\":\"123\",\"data\":\"JzLw2uiQT4IzERg7hdGWFaPAilWJy7e4462Gd9VQ0Mbj0qZI3uDe6wWaSklECHjalCTEt/L1ZAyhf/fxocABc8PSlKIgD3WMGXM06mlnEe7XqG3MCbAyHVYJtdDKKbo9oWNnoRRzd/WOi7aiOq80AyDEYTH5in5Zc4FJO5M0JI8Dj96cG4QmRKdwG6nfBt9PrroR0mqCNacstP9GnTAZ6BpMPAAkfbmrGeLsE/kCYcBXK0EtNLSqBChKwwOUaETeWdmtCl9RDMWAvTCiOgKeWw==\",\"appKey\":\"1234567890123456\",\"Sign\":\"JzLw2uiQT4IzERg7hdGWFaPAilWJy7e4462Gd9VQ0Mbj0qZI3uDe6wWaSklECHjalCTEt/L1ZAyhf/fxocABc8PSlKIgD3WMGXM06mlnEe7XqG3MCbAyHVYJtdDKKbo9oWNnoRRzd/WOi7aiOq80AyDEYTH5in5Zc4FJO5M0JI8Dj96cG4QmRKdwG6nfBt9PrroR0mqCNacstP9GnTAZ6BpMPAAkfbmrGeLsE/kCYcBXK0EtNLSqBChKwwOUaETeWdmtCl9RDMWAvTCiOgKeWw==\",\"Amount\":null}";
        var jsonModel = JsonConvert.DeserializeObject<PaidInfo>(sourceJson2);

        Console.WriteLine(jsonModel.TradeNo);//deserialization again
        Console.ReadKey();
    }
}

public class PaidInfo
{
    public string BizType { get; set; }

    private PaidData _payData;

    public PaidData PayData
    {
        get
        {
            if (_payData != null)
            {
                return this._payData;
            }
            else
            {
                var sourceJson = Aes.Decrypt(Data, AppKey);
                return JsonConvert.DeserializeObject<PayData>(sourceJson);
            }
        }
        set { this._payData = value; }
    }
    public string Data { get; set; }
    public string AppKey { get; set; }

    public string OrderNo
    {
        get => this.PayData.RequestNo;
        set => this.PayData.RequestNo = value;
    }

    public string TradeNo
    {
        get { return this.PayData.ServerRequestNo; }
        set { this.PayData.ServerRequestNo = value; }
    }

}

public class PaidData 
{
    public string RequestNo { get; set; }
    public string ServerRequestNo { get; set; }
    public string MerchantNo { get; set; }
    public string Code { get; set; }
    public string Amount { get; set; }
    public string Fee { get; set; }
    public string BizCode { get; set; }
    public string BizMsg { get; set; }
    public string Status { get; set; }
}

当我访问线路

Console.WriteLine(jsonModel.TradeNo);

Console.WriteLine(jsonModel.OrderNo);

这两个都再次反序列化,性能会受到影响。为什么变量jsonModel在第一次反序列化后不保留值?

1 个答案:

答案 0 :(得分:3)

您必须在获取器中分配this._payData

public PayData PayData
{
    get
    {
        if (_payData == null)
        {
            var sourceJson = Aes.Decrypt(Data, AppKey);
            this._payData = JsonConvert.DeserializeObject<PayData> (sourceJson);//<---store it
        }
        return this._payData;
    }
    set { this._payData = value; }
}
相关问题