{
"id" : 0,
"name" : "meeting",
"text" : "10 pm",
"location" : "Place1",
"startdate" : "10/27/2012 17:11",
"enddate" : "10/27/2012 18:41",
"description" : "Description",
"chairman" : "0",
"members" : [2, 1],
"messagetype" : {
"SMS" : false,
"Email" : true
},
"smsmessage" : null,
"emailmessage" : "this is message",
"emailsubject" : null,
"reminder" : "5",
"timetosendemail" : "10/23/2012 00:00",
"timetosendsms" : null
}
这是我的json字符串。我需要的是解析这个字符串并将每个值存储到类的特定成员中。
班级就像这样
public class Event
{
public int id { get; set; }
public string name {get;set;}
public string text { get; set; }
public DateTime start_date { get; set; }
public DateTime end_date { get; set; }
public string location { get; set; }
public double ReminderAlert { get; set; }
public MessagerType MessageType { get; set; }
public string SmsMessage { get; set; }
public string EmailMessage { get; set; }
public string EmailSubject { get; set; }
public DateTime TimeToSendEmail { get; set; }
public DateTime TimeToSendSMS { get; set; }
public string[] members {get;set;}
}
我使用Json.net库来解析..我的代码片段在下面给出
var eventValues = JsonConvert.DeserializeObject<List<Dictionary<string, Event>>>(stringEvent);
运行此代码后,我收到此错误
无法将当前JSON对象(例如{“name”:“value”})反序列化为类型'System.Collections.Generic.List
1[System.Collections.Generic.Dictionary
2 [System.String,CalendarScheduler.Models.Event]]'因为类型需要JSON数组(例如[1,2,3])才能正确反序列化。要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是可以从JSON对象反序列化的集合类型,如数组或List)。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。
路径'id',第1行,第6位。
应该采取什么措施来避免这种例外......?
答案 0 :(得分:2)
这不起作用?
var eventValues = JsonConvert.DeserializeObject<Event>(stringEvent);
考虑Oded的评论。并将所有JSON属性名称与C#属性名称匹配。
答案 1 :(得分:0)
试试这个:
public T Deserialize<T>(string json)
{
T obj = Activator.CreateInstance<T>();
MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json));
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
obj = (T)serializer.ReadObject(ms);
ms.Close();
return obj;
}
Event MyEvent = Deserialize<Event>(jsonString);