0

我对 C# 真的很不好,希望你能帮助我做以下事情;我目前正在将一个 Json 数组传递给我的 WCF 网络服务。我需要获取 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"}]
4

3 回答 3

2

您发布的代码没有显示您如何尝试反序列化您的 json 字符串,所以我并没有真正理解这里的相关性,但无论如何,这就是如何将 JSON 反序列化为具体的 C# 类。

  1. 创建一个与 Javascript 对象结构匹配的类,如下所示:

    public class Data
    {
      public string  Date {get;set;}
      public int ID {get;set;}
      public string Description {get;set;}
      public string Name {get;set;}
    }
    
  2. 使用JavascriptSerializer反序列化它,如下所示:

    var deserializedData = new JavaScriptSerializer().Deserialize<List<Data>>(jsonString);
    

请注意,您的原始 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"}]

现在,如果您尝试反序列化上述内容,如下所示:

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>回报。

另请注意,我没有为date您的 Javascript 对象中的相应字段使用 DateTime 字段,原因是您的示例日期不是有效的 DateTimes,或者至少DateTime无法从该字符串表示中创建一个对象。例如,“15:30:374:021”没有意义 - 我想 374 是秒字段......

您需要添加对 System.Web.Extensions 的引用才能使用 JavascriptSerializer。

于 2013-02-26T15:30:29.447 回答
0

您可以使用所需的属性创建一个代表类来保存值并使用JavascriptSerializer该类。调用Deserialize<T>指定您的类型的方法将 JSON 反序列化到您的代码中。

类名中的链接以供参考。

于 2013-02-26T14:52:46.647 回答
0

您可以使用Newtonsoft.Json库。您需要做的就是:

List<YourClass> yourClassList = JsonConvert.DeserializeObject<List<YourClass>>(JSONdata);

您可以在此处找到更多信息,甚至是样品

于 2013-02-26T14:56:26.017 回答