无法反序列化JSON数组
问题描述:
我的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);
答
您提供的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”?我迄今为止已经尝试过 –
我很抱歉,但我真的不能看不出这个JSON如何呈现您所提供的类.... –
您是如何反序列化的时刻,什么不起作用? – Sybren