堆叠尝试使用 C# 反序列化来自 API 的 JSON 响应
stacked trying to deserialize a JSON response from an API with C#
我正在构建一个 C# 应用程序以从 Web API 获取数据。
它连接到网络服务器...获取有关股票市场、产品、价格和帐户中剩余资金等的数据。我需要个性化所有这些信息,以便以后可以使用它来计算进出的最佳时机来自市场(买卖股票)。
在那篇简短的介绍之后,我一直在尝试反序列化数据。
在向 API 发出 GET 请求后,我得到了这个 JSON:
{
"cuentas": [
{
"numero": "xxxx",
"tipo": "aaaa",
"moneda": "bbbb",
"disponible": 407397.92,
"comprometido": 0.00,
"saldo": 407397.92,
"titulosValorizados": 0.0,
"total": 407397.92000,
"margenDescubierto": 0.0,
"saldos": [
{
"liquidacion": "inmediato",
"saldo": 407397.92,
"comprometido": 0.00,
"disponible": 407397.92,
"disponibleOperar": 407397.92
},
{
"liquidacion": "hrs24",
"saldo": 0.00,
"comprometido": 0.00,
"disponible": 0.00,
"disponibleOperar": 407397.92
},
{
"liquidacion": "hrs48",
"saldo": 0.00,
"comprometido": 0.00,
"disponible": 0.00,
"disponibleOperar": 407397.92
},
{
"liquidacion": "hrs72",
"saldo": 0.00,
"comprometido": 0.00,
"disponible": 0.00,
"disponibleOperar": 407397.92
},
{
"liquidacion": "masHrs72",
"saldo": 0.00,
"comprometido": 0.00,
"disponible": 0.00,
"disponibleOperar": 0.0
}
],
"estado": "operable"
},
{
"numero": "zzzz",
"tipo": "ccccc",
"moneda": "ddddd",
"disponible": 4574.25,
"comprometido": 0.00,
"saldo": 4574.25,
"titulosValorizados": 0.0,
"total": 4574.25,
"margenDescubierto": 0.0,
"saldos": [
{
"liquidacion": "inmediato",
"saldo": 4574.25,
"comprometido": 0.00,
"disponible": 4574.25,
"disponibleOperar": 4574.25
},
{
"liquidacion": "hrs24",
"saldo": 0.00,
"comprometido": 0.00,
"disponible": 0.00,
"disponibleOperar": 4574.25
},
{
"liquidacion": "hrs48",
"saldo": 0.00,
"comprometido": 0.00,
"disponible": 0.00,
"disponibleOperar": 4574.25
},
{
"liquidacion": "hrs72",
"saldo": 0.00,
"comprometido": 0.00,
"disponible": 0.00,
"disponibleOperar": 4574.25
},
{
"liquidacion": "masHrs72",
"saldo": 0.00,
"comprometido": 0.00,
"disponible": 0.00,
"disponibleOperar": 0.0
}
],
"estado": "operable"
}
],
"estadisticas": [
{
"descripcion": "Anterior",
"cantidad": 27,
"volumen": 1817447.95
},
{
"descripcion": "Actual",
"cantidad": 11,
"volumen": 564217.96
}
],
"totalEnPesos": 699006.3575000000
}
到目前为止我做了什么:
1) 我使用网络应用程序将 JSON 数据转换为我需要的 类。我有这个:
namespace QuickType
{
using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
public partial class Lecturajson
{
[JsonProperty("cuentas")]
public Cuenta[] Cuentas { get; set; }
[JsonProperty("estadisticas")]
public Estadistica[] Estadisticas { get; set; }
[JsonProperty("totalEnPesos")]
public double TotalEnPesos { get; set; }
}
public partial class Cuenta
{
[JsonProperty("numero")]
public string Numero { get; set; }
[JsonProperty("tipo")]
public string Tipo { get; set; }
[JsonProperty("moneda")]
public string Moneda { get; set; }
[JsonProperty("disponible")]
public double Disponible { get; set; }
[JsonProperty("comprometido")]
public long Comprometido { get; set; }
[JsonProperty("saldo")]
public double Saldo { get; set; }
[JsonProperty("titulosValorizados")]
public long TitulosValorizados { get; set; }
[JsonProperty("total")]
public double Total { get; set; }
[JsonProperty("margenDescubierto")]
public long MargenDescubierto { get; set; }
[JsonProperty("saldos")]
public Saldo[] Saldos { get; set; }
[JsonProperty("estado")]
public string Estado { get; set; }
}
public partial class Saldo
{
[JsonProperty("liquidacion")]
public string Liquidacion { get; set; }
[JsonProperty("saldo")]
public double SaldoSaldo { get; set; }
[JsonProperty("comprometido")]
public long Comprometido { get; set; }
[JsonProperty("disponible")]
public double Disponible { get; set; }
[JsonProperty("disponibleOperar")]
public double DisponibleOperar { get; set; }
}
public partial class Estadistica
{
[JsonProperty("descripcion")]
public string Descripcion { get; set; }
[JsonProperty("cantidad")]
public long Cantidad { get; set; }
[JsonProperty("volumen")]
public double Volumen { get; set; }
}
}
2) 我在想类似的东西:(使 JSON 正常工作的字符串 "raw")
IRestResponse responseestadocuenta = clientestadocuenta.Execute(requestestadocuenta);
raw = Convert.ToString(responseestadocuenta.Content);
var obj = JsonConvert.DeserializeObject<Lecturajson>(raw);
3) 没有 3。我卡在“2”了。
额外问题:这次我有 2 个帐户("cuentas" 西班牙语,如果您查看 JSON。它们是 "numero":"xxxx" 和 "numero":"zzzz"。但下次用户如果购买更多,可以获得更多帐户...所以 JSON 响应在他的一般结构中是固定的,而不是在 [=45 的数量中=] ("numero" 就像他们每个人的 ID)
这是我的问题:
A) 所有这些数据大约每秒刷新一次......还不确定,我认为处理所有这些东西的最佳方法是将其存储到 SQL 数据库中。你觉得可以吗??请记住,此 GET 请求只是我的应用程序中可用的 10 或 15 个其他类似请求中的 1 个...只是为了描绘它将处理的信息量。
B) 我需要一些关于“2”中 deserealize 的帮助,这样它就可以与我将所有这些存储在 SQL 数据库中的想法兼容。
*********************************+
我乐于接受任何帮助、更正、想法和新内容。几周前我开始使用 C#,相信我,直到现在我都不敢相信我已经走了多远。如果我问的是新手问题,请原谅我。
非常感谢您的时间和耐心等待。
class 定义看起来不错。至于在 classes 中获取 JSON 的代码,这是一个应该对
有帮助的示例
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("http://<Your_API_Endpoint>");
string responseBody = await response.Content.ReadAsStringAsync();
var s = Newtonsoft.Json.JsonConvert.DeserializeObject<Lecturajson>(responseBody);
终于在你的帮助下做了这样的事情...
var s = Newtonsoft.Json.JsonConvert.DeserializeObject<Lecturajson>(raw2);
resultadoconsulta.Text =
"******************** ESTADO DE CUENTA ********************" +
"\nCuenta Nº: " + s.Cuentas[1].Numero +
"\nTipo de Cuenta: " + s.Cuentas[1].Tipo +
"\nMoneda: " + s.Cuentas[1].Moneda +
"\nTotal en Pesos: " + s.TotalEnPesos;
了解如何在反序列化后处理数据...
谢谢大家!!
我正在构建一个 C# 应用程序以从 Web API 获取数据。 它连接到网络服务器...获取有关股票市场、产品、价格和帐户中剩余资金等的数据。我需要个性化所有这些信息,以便以后可以使用它来计算进出的最佳时机来自市场(买卖股票)。
在那篇简短的介绍之后,我一直在尝试反序列化数据。
在向 API 发出 GET 请求后,我得到了这个 JSON:
{
"cuentas": [
{
"numero": "xxxx",
"tipo": "aaaa",
"moneda": "bbbb",
"disponible": 407397.92,
"comprometido": 0.00,
"saldo": 407397.92,
"titulosValorizados": 0.0,
"total": 407397.92000,
"margenDescubierto": 0.0,
"saldos": [
{
"liquidacion": "inmediato",
"saldo": 407397.92,
"comprometido": 0.00,
"disponible": 407397.92,
"disponibleOperar": 407397.92
},
{
"liquidacion": "hrs24",
"saldo": 0.00,
"comprometido": 0.00,
"disponible": 0.00,
"disponibleOperar": 407397.92
},
{
"liquidacion": "hrs48",
"saldo": 0.00,
"comprometido": 0.00,
"disponible": 0.00,
"disponibleOperar": 407397.92
},
{
"liquidacion": "hrs72",
"saldo": 0.00,
"comprometido": 0.00,
"disponible": 0.00,
"disponibleOperar": 407397.92
},
{
"liquidacion": "masHrs72",
"saldo": 0.00,
"comprometido": 0.00,
"disponible": 0.00,
"disponibleOperar": 0.0
}
],
"estado": "operable"
},
{
"numero": "zzzz",
"tipo": "ccccc",
"moneda": "ddddd",
"disponible": 4574.25,
"comprometido": 0.00,
"saldo": 4574.25,
"titulosValorizados": 0.0,
"total": 4574.25,
"margenDescubierto": 0.0,
"saldos": [
{
"liquidacion": "inmediato",
"saldo": 4574.25,
"comprometido": 0.00,
"disponible": 4574.25,
"disponibleOperar": 4574.25
},
{
"liquidacion": "hrs24",
"saldo": 0.00,
"comprometido": 0.00,
"disponible": 0.00,
"disponibleOperar": 4574.25
},
{
"liquidacion": "hrs48",
"saldo": 0.00,
"comprometido": 0.00,
"disponible": 0.00,
"disponibleOperar": 4574.25
},
{
"liquidacion": "hrs72",
"saldo": 0.00,
"comprometido": 0.00,
"disponible": 0.00,
"disponibleOperar": 4574.25
},
{
"liquidacion": "masHrs72",
"saldo": 0.00,
"comprometido": 0.00,
"disponible": 0.00,
"disponibleOperar": 0.0
}
],
"estado": "operable"
}
],
"estadisticas": [
{
"descripcion": "Anterior",
"cantidad": 27,
"volumen": 1817447.95
},
{
"descripcion": "Actual",
"cantidad": 11,
"volumen": 564217.96
}
],
"totalEnPesos": 699006.3575000000
}
到目前为止我做了什么:
1) 我使用网络应用程序将 JSON 数据转换为我需要的 类。我有这个:
namespace QuickType
{
using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
public partial class Lecturajson
{
[JsonProperty("cuentas")]
public Cuenta[] Cuentas { get; set; }
[JsonProperty("estadisticas")]
public Estadistica[] Estadisticas { get; set; }
[JsonProperty("totalEnPesos")]
public double TotalEnPesos { get; set; }
}
public partial class Cuenta
{
[JsonProperty("numero")]
public string Numero { get; set; }
[JsonProperty("tipo")]
public string Tipo { get; set; }
[JsonProperty("moneda")]
public string Moneda { get; set; }
[JsonProperty("disponible")]
public double Disponible { get; set; }
[JsonProperty("comprometido")]
public long Comprometido { get; set; }
[JsonProperty("saldo")]
public double Saldo { get; set; }
[JsonProperty("titulosValorizados")]
public long TitulosValorizados { get; set; }
[JsonProperty("total")]
public double Total { get; set; }
[JsonProperty("margenDescubierto")]
public long MargenDescubierto { get; set; }
[JsonProperty("saldos")]
public Saldo[] Saldos { get; set; }
[JsonProperty("estado")]
public string Estado { get; set; }
}
public partial class Saldo
{
[JsonProperty("liquidacion")]
public string Liquidacion { get; set; }
[JsonProperty("saldo")]
public double SaldoSaldo { get; set; }
[JsonProperty("comprometido")]
public long Comprometido { get; set; }
[JsonProperty("disponible")]
public double Disponible { get; set; }
[JsonProperty("disponibleOperar")]
public double DisponibleOperar { get; set; }
}
public partial class Estadistica
{
[JsonProperty("descripcion")]
public string Descripcion { get; set; }
[JsonProperty("cantidad")]
public long Cantidad { get; set; }
[JsonProperty("volumen")]
public double Volumen { get; set; }
}
}
2) 我在想类似的东西:(使 JSON 正常工作的字符串 "raw")
IRestResponse responseestadocuenta = clientestadocuenta.Execute(requestestadocuenta);
raw = Convert.ToString(responseestadocuenta.Content);
var obj = JsonConvert.DeserializeObject<Lecturajson>(raw);
3) 没有 3。我卡在“2”了。
额外问题:这次我有 2 个帐户("cuentas" 西班牙语,如果您查看 JSON。它们是 "numero":"xxxx" 和 "numero":"zzzz"。但下次用户如果购买更多,可以获得更多帐户...所以 JSON 响应在他的一般结构中是固定的,而不是在 [=45 的数量中=] ("numero" 就像他们每个人的 ID)
这是我的问题:
A) 所有这些数据大约每秒刷新一次......还不确定,我认为处理所有这些东西的最佳方法是将其存储到 SQL 数据库中。你觉得可以吗??请记住,此 GET 请求只是我的应用程序中可用的 10 或 15 个其他类似请求中的 1 个...只是为了描绘它将处理的信息量。
B) 我需要一些关于“2”中 deserealize 的帮助,这样它就可以与我将所有这些存储在 SQL 数据库中的想法兼容。
*********************************+
我乐于接受任何帮助、更正、想法和新内容。几周前我开始使用 C#,相信我,直到现在我都不敢相信我已经走了多远。如果我问的是新手问题,请原谅我。
非常感谢您的时间和耐心等待。
class 定义看起来不错。至于在 classes 中获取 JSON 的代码,这是一个应该对
有帮助的示例 HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("http://<Your_API_Endpoint>");
string responseBody = await response.Content.ReadAsStringAsync();
var s = Newtonsoft.Json.JsonConvert.DeserializeObject<Lecturajson>(responseBody);
终于在你的帮助下做了这样的事情...
var s = Newtonsoft.Json.JsonConvert.DeserializeObject<Lecturajson>(raw2);
resultadoconsulta.Text =
"******************** ESTADO DE CUENTA ********************" +
"\nCuenta Nº: " + s.Cuentas[1].Numero +
"\nTipo de Cuenta: " + s.Cuentas[1].Tipo +
"\nMoneda: " + s.Cuentas[1].Moneda +
"\nTotal en Pesos: " + s.TotalEnPesos;
了解如何在反序列化后处理数据...
谢谢大家!!