2016-07-19 125 views
0

嗨,大家好,我如何得到這個工作?我在SO搜索,這是最promissing,但它也不工作。JSON到列表<class>&列表<class>到JSON?

errormessage的:

反序列化類型應該是一個正常的.NET類型(即,不是 原始類型像整數,而不是集合類型等的陣列或 列表)或字典類型(即字典)。

那麼我該如何拆分我的json中的單個對象?

List<class> a = JsonConvert.DeserializeObject<List<class>>(JSON_String) 

JSON字符串:

{ 
"SPALTEN": [{ 
    "NUMMER": 1, 
    "NAME": "BREITE", 
    "TYP": "Double", 
    "LAENGE": 0, 
    "EINHEIT": "m", 
    "EDITIERBAR": true, 
    "OPTIONAL": true, 
    "LAYER": null, 
    "LAYER_SPALTE": null, 
    "D_SPAL_NAME": null, 
    "D_SPAL_MIN": 0, 
    "D_SPAL_MAX": null, 
    "D_SPAL_VAL": null 
}, { 
    "NUMMER": 2, 
    "NAME": "KOMMENTAR", 
    "TYP": "String", 
    "LAENGE": 255, 
    "EINHEIT": null, 
    "EDITIERBAR": true, 
    "OPTIONAL": true, 
    "LAYER": null, 
    "LAYER_SPALTE": null, 
    "D_SPAL_NAME": null, 
    "D_SPAL_MIN": null, 
    "D_SPAL_MAX": null, 
    "D_SPAL_VAL": null 
}] 
} 

這裏是我的類:

public class CONFIG_CLASS 
{ 

    private int _NUMMER; 
    public int NUMMER 
    { 
     get { return _NUMMER; } 
     set { _NUMMER = value; } 
    } 

    private string _NAME; 
    public string NAME 
    { 
     get { return _NAME; } 
     set { _NAME = value; } 
    } 

    private string _TYP; 
    public string TYP 
    { 
     get { return _TYP; } 
     set { _TYP = value; } 
    } 

    private double _LAENGE; 
    public double LAENGE 
    { 
     get { return _LAENGE; } 
     set { _LAENGE = value; } 
    } 

    private string _EINHEIT; 
    public string EINHEIT 
    { 
     get { return _EINHEIT; } 
     set { _EINHEIT = value; } 
    } 

    private bool _EDITIERBAR; 
    public bool EDITIERBAR 
    { 
     get { return _EDITIERBAR; } 
     set { _EDITIERBAR = value; } 
    } 

    private bool _OPTIONAL; 
    public bool OPTIONAL 
    { 
     get { return _OPTIONAL; } 
     set { _OPTIONAL = value; } 
    } 

    private string _LAYER; 
    public string LAYER 
    { 
     get { return _LAYER; } 
     set { _LAYER = value; } 
    } 

    private int _LAYER_SPALTE; 
    public int LAYER_SPALTE 
    { 
     get { return _LAYER_SPALTE; } 
     set { _LAYER_SPALTE = value; } 
    } 

    private string _D_SPAL_NAME; 
    public string D_SPAL_NAME 
    { 
     get { return _D_SPAL_NAME; } 
     set { _D_SPAL_NAME = value; } 
    } 

    private int _D_SPAL_MIN; 
    public int D_SPAL_MIN 
    { 
     get { return _D_SPAL_MIN; } 
     set { _D_SPAL_MIN = value; } 
    } 

    private int _D_SPAL_MAX; 
    public int D_SPAL_MAX 
    { 
     get { return _D_SPAL_MAX; } 
     set { _D_SPAL_MAX = value; } 
    } 

    private string _D_SPAL_VAL; 
    public string D_SPAL_VAL 
    { 
     get { return _D_SPAL_VAL; } 
     set { _D_SPAL_VAL = value; } 
    } 


} 

(我也想稍後再對其進行編碼) 謝謝!

+0

請出示JSON字符串,當然 –

+0

,在這裏你是 –

+0

燦你也顯示你的目的地?只要字段名稱匹配(即,第一個字段是NUMMER),那麼反序列化應該「正常工作」。 – Neil

回答

0

對不起,我不能把評論 首先,你有你的數據和轉換類之間的一些類型不匹配: LAYER_SPALTE,D_SPAL_MIN和D_SPAL_MAX資料中的空。 把嘗試把另一個類

這個代碼必須爲你工作中的數組:

public class MyClass 
{ 
    public SPALTEN[] SPALTEN { get; set; } 
} 

public class SPALTEN 
{ 
    public int NUMMER { get; set; } 
    public string NAME { get; set; } 
    public string TYP { get; set; } 
    public int LAENGE { get; set; } 
    public string EINHEIT { get; set; } 
    public bool EDITIERBAR { get; set; } 
    public bool OPTIONAL { get; set; } 
    public string LAYER { get; set; } 
    public int? LAYER_SPALTE { get; set; } 
    public string D_SPAL_NAME { get; set; } 
    public int? D_SPAL_MIN { get; set; } 
    public int? D_SPAL_MAX { get; set; } 
    public string D_SPAL_VAL { get; set; } 
} 

然後

MyClass a = JsonConvert.DeserializeObject<MyClass>(JSON_String) 
+0

這工作對我來說!所以我的班級也需要和傑森字符串一樣的「班級結構」 –

1

你應該指定你想要反序列化的東西的類型,我不認爲object將工作。

List<MyClass> a = JsonConvert.DeserializeObject<List<MyClass>>("[{some json}]") 
+0

對不起你的權利我補習班 –

+0

這個回答你的問題嗎? – Neil

+0

不,這是我的一個錯誤,當簡化代碼爲stackoverflow –

0

要在Internet上轉換它,可以使用下面的URL將JSON轉換爲C#。我一直在使用這麼久。

http://json2csharp.com/

+0

我也試過它創建一個類,但它也沒有工作(真棒wesite你!) –