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
在第一次反序列化后不保留值?
答案 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; }
}