我在VS2017中使用C#。我有一个json从我获取数据,这3个类:
public class Azar
{
public int id_juego { get; set; }
public string timestamp { get; set; }
public int id_tipojuego { get; set; }
public string fecha { get; set; }
public int? sorteo { get; set; }
public object resultados { get; set; }
public string tipo_juego { get; set; }
public int tipo { get; set; }
}
public class ResultadoQuiniela
{
public string letras { get; set; }
public int[] numeros { get; set; }
}
public class ResultadoTelekino
{
public int sorteo { get; set; }
public int b1 { get; set; }
public int b2 { get; set; }
public int b3 { get; set; }
public int b4 { get; set; }
public int b5 { get; set; }
public int b6 { get; set; }
public int b7 { get; set; }
public int b8 { get; set; }
public int b9 { get; set; }
public int b10 { get; set; }
public int b11 { get; set; }
public int b12 { get; set; }
public int b13 { get; set; }
public int b14 { get; set; }
public int b15 { get; set; }
public int cat1 { get; set; }
public int cat2 { get; set; }
public int cat3 { get; set; }
public int cat4 { get; set; }
public int cat5 { get; set; }
public int cat6 { get; set; }
public int cat7 { get; set; }
public string prm1 { get; set; }
public string prm2 { get; set; }
public string prm3 { get; set; }
public string prm4 { get; set; }
public string prm5 { get; set; }
public string prm6 { get; set; }
public string prm7 { get; set; }
public string pozo { get; set; }
public string ext { get; set; }
}
Azar-> resultados对象可以是2个类中的任何一个,或者是ResultadoQuiniela或ResultadoTelekino。在解析json并看到id_tipojuego之前,我不知道它们是哪一个。一旦我知道我这样做了:
if(curAzar.id_tipojuego == 25)
{
ResultadoQuiniela resultados = (ResultadoQuiniela)curAzar.resultados;
}
但我得到空结果。我看到curAzar(是从json解析的结果)是每个属性集,但是resultados对象。如何以“中性”方式存储该信息,然后将其投射到正确的对象?将其声明为对象然后将其强制转换它根本不存储该值。
编辑:使用Newtonsoft.Json解析json Im
答案 0 :(得分:0)
您是否也可以控制该json的序列化?如果是这样,请查看
mux = pd.MultiIndex.from_arrays([
list('aaaabbbbbccdddddd'),
list('tuvwlmnopxyfghijk')
], names=['one', 'two'])
df = pd.DataFrame({'col': np.arange(len(mux))}, mux)
df
col
one two
a t 0
u 1
v 2
w 3
b l 4
m 5
n 6
o 7
p 8
c x 9
y 10
d f 11
g 12
h 13
i 14
j 15
k 16
如果您获得序列化器以在该json中包含类型信息。 Newtonsoft.Json的反序列化器将自动为您处理它。 你只需要声明一个基类Resultado,其他2继承,然后在你的Azar中公开对象resultados {get;组; },声明
col
one two
a t 0
u 1
b l 4
m 5
或
JsonSerializerSettings.TypeNameHandling
无论你期待什么。
答案 1 :(得分:0)
我找到了一个有效的解决方案: 当我获得resultado字段(动态对象)时,我将其转换为字符串,然后根据条件以这种方式将其反序列化为正确的类:
JsonConvert.DeserializeObject<ResultadoQuiniela>(curAzar.resultado.ToString());
这有效并且没有错误(作为常规演员,无法完成)。但是,如果有更好的方法,我会等到另一个答案。