2017-09-07 53 views
-1

寫入類以反序列化JSON文件時出現問題。將JSON反序列化到包含字典的類時獲取空字段

我的課是這樣的:

public class Button1 
{ 
    public string Caption = ""; 
    public Dictionary<string, Button1> Buttons; 
} 

public class ButtonsMenu 
{ 
    public Dictionary<string, Button1> Buttons; 
} 

,我嘗試反序列化JSON這樣:

{ 
    "Buttons": { 
    "Activity": { 
     "btn1": { 
     "Caption": "Promeni sostojba" 
     }, 
     "btn2": { 
     "Caption": "Izvrsi nesto drugo" 
     } 
    }, 
    "Navigate": { 
     "btnA": { 
     "Caption": "Pojdi na druga forma" 
     }, 
     "btnB": { 
     "Caption": "Otvori nesto razlicno" 
     } 
    }, 
    "Print": { 
     "btnX1": { 
     "Caption": "Pecati nalog" 
     }, 
     "btnX2": { 
     "Caption": "Pecati report" 
     } 
    } 
    } 
} 

與使用Json.Net的是這樣的:

var buttonDef = JsonConvert.DeserializeObject<ESB.Shared.DTO.ButtonsMenu>(formDefJson); 

我的問題是當我試圖反序列化我的JSON時,我有三個項目Activity,NavigatePrint,但字段Captions到處都是空的。 你能告訴我我在課堂上缺少什麼嗎?

+0

爲什麼你默認將它設置爲空字符串? 'public string Caption =「」' – Niladri

+1

如果它沒有值爲空字符串而不爲空 –

+2

這裏有兩個級別,Activity是另一個字典,試着將ButtonsMenu中的按鈕放到這裏:'public Dictionary >按鈕;'。 –

回答

0

使用類

public class Btn1 
{ 
    public string Caption { get; set; } 
} 

public class Btn2 
{ 
    public string Caption { get; set; } 
} 

public class Activity 
{ 
    public Btn1 btn1 { get; set; } 
    public Btn2 btn2 { get; set; } 
} 

public class BtnA 
{ 
    public string Caption { get; set; } 
} 

public class BtnB 
{ 
    public string Caption { get; set; } 
} 

public class Navigate 
{ 
    public BtnA btnA { get; set; } 
    public BtnB btnB { get; set; } 
} 

public class BtnX1 
{ 
    public string Caption { get; set; } 
} 

public class BtnX2 
{ 
    public string Caption { get; set; } 
} 

public class Print 
{ 
    public BtnX1 btnX1 { get; set; } 
    public BtnX2 btnX2 { get; set; } 
} 

public class Buttons 
{ 
    public Activity Activity { get; set; } 
    public Navigate Navigate { get; set; } 
    public Print Print { get; set; } 
} 

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

,或者使用服務來生成類http://json2csharp.com/ 希望我幫你:)

更新:,如果你想使用字典試試這個

public class Button1 
{ 
    public string Caption; 
    public Dictionary<string, Dictionary<string, Button1>> Buttons; 
} 

public class ButtonsMenu 
{ 
    public Dictionary<string, Dictionary<string, Button1>> Buttons; 
} 
+0

我正在使用字典,這是更復雜的類,但謝謝 –

0

它無法正常工作,因爲您的JSON與您的類結構完全不匹配。有兩種方法可以解決它 - 要麼改變你的類,要麼改變JSON。

如果你想改變的JSON,使其與您現有的類工作,那麼你需要一個額外的Buttons水平圍繞內按鈕對象是這樣的:

{ 
    "Buttons": { 
    "Activity": { 
     "Buttons": { 
     "btn1": { 
      "Caption": "Promeni sostojba" 
     }, 
     "btn2": { 
      "Caption": "Izvrsi nesto drugo" 
     } 
     } 
    }, 
    "Navigate": { 
     "Buttons": { 
     "btnA": { 
      "Caption": "Pojdi na druga forma" 
     }, 
     "btnB": { 
      "Caption": "Otvori nesto razlicno" 
     } 
     } 
    }, 
    "Print": { 
     "Buttons": { 
     "btnX1": { 
      "Caption": "Pecati nalog" 
     }, 
     "btnX2": { 
      "Caption": "Pecati report" 
     } 
     } 
    } 
    } 
} 

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

如果你寧願改變你的類以適應你的問題中的JSON,那麼你需要將外部Buttons字典更改爲嵌套字典:

public class ButtonsMenu 
{ 
    public Dictionary<string, Dictionary<string, Button1>> Buttons; 
} 

public class Button1 
{ 
    public string Caption = ""; 
} 

小提琴:https://dotnetfiddle.net/1KbQoD