存储未知对象类型

时间:2017-10-23 23:17:03

标签: c# json visual-studio casting

我在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

2 个答案:

答案 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());

这有效并且没有错误(作为常规演员,无法完成)。但是,如果有更好的方法,我会等到另一个答案。