我收到这样的JSON响应:
{
"xpubaddressONE":{"final_balance":123,"n_tx":0,"total_received":0},
"xpubaddressTWO":{"final_balance":25221,"n_tx":0,"total_received":0},
"xpubaddressTHREE":{"final_balance":1123,"n_tx":0,"total_received":0}
}
我想将其反序列化为C#对象。我需要构建这样的类:
public class xpubaddressONE
{
public int final_balance { get; set; }
public int n_tx { get; set; }
public int total_received { get; set; }
}
public class xpubaddressTHREE
{
public int final_balance { get; set; }
public int n_tx { get; set; }
public int total_received { get; set; }
}
public class xpubaddressTWO
{
public int final_balance { get; set; }
public int n_tx { get; set; }
public int total_received { get; set; }
}
public class RootObject
{
public xpubaddressONE one { get; set; }
public xpubaddressTWO two { get; set; }
public xpubaddressTHREE three { get; set; }
}
我的目标是删除其他类(xpubaddressONE,xpubaddressTWO,xpubaddressTHREE)并访问这样的对象:
RootObject.final_balance
答案 0 :(得分:3)
我会尝试反序列化Dictionary<string, xpubaddress>
,其中xpubaddress
是:
public class xpubaddress
{
public int final_balance { get; set; }
public int n_tx { get; set; }
public int total_received { get; set; }
}
这将为您提供一个包含3个键的字典,您可以使用foreach
,TryGetValue
等进行检查。
或者,坚持您的根类型,但共享内部类型:
public class xpubaddress
{
public int final_balance { get; set; }
public int n_tx { get; set; }
public int total_received { get; set; }
}
public class RootObject
{
public xpubaddress xpubaddressONE{ get; set; }
public xpubaddress xpubaddressTWO{ get; set; }
public xpubaddress xpubaddressTHREE { get; set; }
}
您可能还会发现将属性名称保留为惯用的.NET名称,并使用[JsonProperty]
或[DataMember]
重命名它们,即
[JsonProperty("final_balance")]
public int FinalBalance { get; set; }
答案 1 :(得分:1)
您可以引入单个xpubaddress
类,例如
public class xpubaddress
{
public int final_balance { get; set; }
public int n_tx { get; set; }
public int total_received { get; set; }
}
然后将其反序列化为IDictionary<string, xpubaddress>
,例如,使用xpubaddressONE
,xpubaddressTWO
等键添加访问对象
var result = JsonConvert.DeserializeObject<IDictionary<string, xpubaddress>>(json);
var balance = result?["xpubaddressONE"]?.final_balance ?? 0;