Json Stream在Wcf c#service to array中

时间:2013-02-26 14:21:58

标签: c# json wcf deserialization

我对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"}]

3 个答案:

答案 0 :(得分: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);
    
  3. 请注意,您的原始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