2015-10-07 168 views
0

我的Json如下圖所示:無法反序列化JSON數組

[ 
    { 
     "name": "ts.DatumVon", 
     "value": "29.10.2015" 
    }, 
    { 
     "name": "ts.Von", 
     "value": "8:00" 
    }, 
    { 
     "name": "ts.Bis", 
     "value": "16:30" 
    } 
] 

該類:

public class TSInfo 
{ 
    public TimeSaver ts { get; set; } 

    [Display(Name = "Status")] 
    public TSStatus tsStatus { get; set; } 

    [Display(Name = "Typ")] 
    public TSTyp tsTyp { get; set; } 

    public TSAuswahlSteps step { get; set; } 
} 

如何反序列化控制器的方法這個JSON字符串?編輯: 我希望澄清它。

public class TimeSaver 
{ 
    public DateTime DatumVon { get; set; } 
    public TimeSpan Von { get; set; } 
    public TimeSpan Bis { get; set; } 
} 

我想是這樣的:

string tsi = [{"name":"ts.DatumVon","value":"29.10.2015"},{"name":"ts.Von","value":"8:00"},{"name":"ts.Bis","value":"16:30"}] 
var dict = JsonConvert.DeserializeObject<List<Dictionary<String,String>>(tsi); 
+3

我很抱歉,但我真的不能看不出這個JSON如何呈現您所提供的類.... –

+0

您是如何反序列化的時刻,什麼不起作用? – Sybren

回答

0

您提供的JSON是字典列表。所以,你可以反序列化(使用NewtonSoft.Json)是這樣的:

string json = "your json"; 
var result = JsonConvert.Deserialize<List<Dictionary<String,String>>(json); 

你如何映射結果類是由你。

編輯以上沒有任何意義。對不起。

那麼,你的JSON給了我一些頭痛,但我想我修好了它。

JSON是一個KeyValuePairs的數組。每對描述TimeSaver類的屬性。整個數組描述了完整的類。我不知道將此JSON轉換爲C#類的簡單方法。更爲複雜的問題是每個屬性都有某種名稱空間前綴:ts。最後的複雜情況是日期格式。這不是自動識別的格式。

我的解決方案將JSON轉換爲描述TimeSaver對象的新JSON。這個新的JSON然後使用JsonConvert進行反序列化。

仍然存在一個問題:TimeSaver.DateVon已成爲字符串。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using Newtonsoft.Json; 

public class Program 
{ 
    public static void Main() 
    { 
     string tsi = "[{\"name\":\"ts.DatumVon\",\"value\":\"29.10.2015\"},{\"name\":\"ts.Von\",\"value\":\"8:00\"},{\"name\":\"ts.Bis\",\"value\":\"16:30\"}]"; 

     var attributes = JsonConvert.DeserializeObject<List<NameValuePair>>(tsi); 
     attributes = attributes 
      .Select(item => new NameValuePair { Name = item.Name.Replace("ts.", ""), Value = item.Value }) 
      .ToList(); 

     var newJson = "{" + String.Join(",", attributes.Select(item => String.Format("\"{0}\":\"{1}\"", item.Name, item.Value))) + "}"; 

     Console.WriteLine(newJson); 

     var ts = JsonConvert.DeserializeObject<TimeSaver>(newJson); 

     Console.WriteLine(ts.DatumVon); 
     Console.WriteLine(ts.Von); 
     Console.WriteLine(ts.Bis); 
    } 
} 

public class NameValuePair 
{ 
    public string Name { get; set; } 
    public string Value { get; set; } 
} 

public class TimeSaver 
{ 
    public String DatumVon { get; set; } 
    public TimeSpan Von { get; set; } 
    public TimeSpan Bis { get; set; } 
} 
+0

NewtonSoft.Json.JsonConvert本身不包含「反序列化」。你的意思是「DeserializeObject」?我迄今爲止已經嘗試過 –