2017-04-12 183 views
-1

我哈瓦一个JSON文件看起来是这样的:C#无法反序列化JSON对象

{"APPMYPETS":{"note":"backend app mobile","esito":"Non applicabile"}, 

{"CANINA":{"note":"backend app mobile","esito":"Non applicabile"}} 

我创建的地图类的尝试看起来是这样的:

class RootObj 
{ 
    public CodElettra elettra{get;set;} 
} 
public class CodElettra 
{ 
    public string note {get:set;} 
    public string esito {get;set;} 
} 

我用Newtonsoft.Json ;

string json = r.ReadToEnd(); 

var x = JsonConvert.DeserializeObject<RootObj>(json); 

var x is null 

我试过在线将Json对象转换为C#类,但它不起作用。 感谢您帮助

+1

的事情是,'APPMYPETS'和'CANINA'从'elettra'不同。 – dcg

+2

“它不起作用”是*从来没有足够的信息。怎么了?请发布[mcve],以便我们复制该问题。 JSON对象包含1K对象“APPMYPETS”和“CANINA”是动态的其他字段“注意事项不会帮助您的JSON中的名称与您的类中的名称不匹配,例如'note' ... –

+0

“和”esito“是静态的 – Mercury77

回答

0

由于属性名称是动态的,尝试反序列化到Dictionary<string, CodElettra>,而不是RootObject

var x = JsonConvert.DeserializeObject<Dictionary<string, CodElettra>>(json); 

小提琴:https://dotnetfiddle.net/cZJ2Q0

+0

我正在阅读你发布的一些Jtoken示例... – Mercury77

+0

它的作品当然我是盲目的,不立即感谢这一点,非常感谢 – Mercury77

2

根据JSON字符串{"CANINA":{"note":"backend app mobile","esito":"Non applicabile"}}

你的C#类应该是这样的:

public class CANINA 
{ 
    public string note { get; set; } 
    public string esito { get; set; } 
} 

public class RootObject 
{ 
    public CANINA CANINA { get; set; } 
} 

更新:我意识到,你的完整的JSON字符串无效,我假设你完整的json字符串是

{ 
    "APPMYPETS": { 
     "note": "backend app mobile", 
     "esito": "Non applicabile" 
    }, 
    "CANINA": { 
     "note": "backend app mobile", 
     "esito": "Non applicabile" 
    } 
} 

那么你的c#类应该是厕所K类似于这样:

public class APPMYPETS 
{ 
    public string note { get; set; } 
    public string esito { get; set; } 
} 

public class CANINA 
{ 
    public string note { get; set; } 
    public string esito { get; set; } 
} 

public class RootObject 
{ 
    public APPMYPETS APPMYPETS { get; set; } 
    public CANINA CANINA { get; set; } 
} 
+0

好吧,我写1k类吗? “CANINA”和“APPMYPETS”是dinamyc是我需要用其他方式映射它们的值。不幸的是已经从csv文件中序列化读取 – Mercury77

+0

我试图实现这个请看一下:https://dotnetfiddle.net/3luoXo – Mercury77

+0

如果键是动态的,那么在C#中使用JToken。去谷歌上查询。 – JerryGoyal