我对C#非常不满意,并希望你的帮助做到以下几点;我目前正在将Json数组传递给我的WCF Web服务。我需要获取json数组并将其插入列表中。我不知道在C#中反序列化。请告诉我,实现这一目标的最佳方法是什么。我的代码如下:
public String UpdateOrderAddress(Stream userInfo)
{
try
{
StreamReader reader = new StreamReader(userInfo);
string JSONdata = reader.ReadToEnd();
if (JSONdata == null)
{
return "null";
}
return JSONdata; // Success !
}
catch (Exception e)
{
return e.ToString();
}
}
这是我从读者那里得到的字符串中的数据
[{"date":"2013-02-22 15:30:374:021","id":"1","description":"test","name":"test"},
"date":"2013-02-25 11:56:926:020","id":"2","description":"ghy","name":"fhh"},
"date":"2013-02-25 11:56:248:026","id":"3","description":"ghfm","name":"run"}]
答案 0 :(得分:2)
您发布的代码没有显示您是如何反序列化您的json字符串所以我并不真正遵循这里的相关性,但无论如何,这是如何将JSON反序列化为具体的C#类。
创建一个与Javascript对象结构匹配的类,如下所示:
public class Data
{
public string Date {get;set;}
public int ID {get;set;}
public string Description {get;set;}
public string Name {get;set;}
}
使用JavascriptSerializer对其进行反序列化:
var deserializedData = new JavaScriptSerializer().Deserialize<List<Data>>(jsonString);
请注意,您的原始JSON字符串格式不正确。它缺少数组中每个元素的开放{
。它应该是:
[{ “日期”:“2013年2月22日 15:30:374:021" , “ID” 为 “1”, “描述”: “测试”, “名称”: “测试”}, {“日期”:“2013年2月25日 11:56:926:020" , “ID”: “2”, “描述”: “GHY”, “名称”: “FHH”}, {“日期”:“2013年2月25日 11:56:248:026" , “ID”: “3”, “描述”: “ghfm”, “名称”: “运行”}]
现在,如果您尝试反序列化上述内容,请执行以下操作:
string json = @"[{""date"":""2013-02-22 15:30:374:021"",""id"":""1"",""description"":""test"",""name"":""test""},
{""date"":""2013-02-25 11:56:926:020"",""id"":""2"",""description"":""ghy"",""name"":""fhh""},
{""date"":""2013-02-25 11:56:248:026"",""id"":""3"",""description"":""ghfm"",""name"":""run""}]";
var deserializedData = new JavaScriptSerializer().Deserialize<List<Data>>(json);
你会得到一个不错的List<Data>
回来。
另请注意,我没有在Javascript对象中使用DateTime字段作为相应的date
字段,原因是您的样本日期无效DateTimes或至少DateTime
个对象不能从该字符串表示创建。例如,“15:30:374:021”毫无意义 - 我会想象374是秒场......
您需要添加对System.Web.Extensions的引用才能使用JavascriptSerializer。
答案 1 :(得分:0)
您可以使用所需属性创建代表类来保存值并使用JavascriptSerializer
类。调用指定类型的Deserialize<T>
方法将JSON反序列化为代码。
类名中的链接以供参考。
答案 2 :(得分:0)
您可以使用 Newtonsoft.Json 库。您需要做的就是:
List<YourClass> yourClassList = JsonConvert.DeserializeObject<List<YourClass>>(JSONdata);
您可以找到更多信息,甚至是样本here