【问题标题】:Json Stream in Wcf c# service to arrayWcf c#服务中的Json Stream到数组
【发布时间】:2013-02-26 14:21:58
【问题描述】:

我非常不擅长 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"}]

【问题讨论】:

标签: c# json wcf deserialization


【解决方案1】:

您发布的代码没有显示您如何尝试反序列化您的 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 字符串格式不正确。它缺少数组每个元素上的开头{。确实应该是:

[{"日期":"2013-02-22 15:30:374:021","id":"1","description":"test","name":"test"}, {“日期”:“2013-02-25 11:56:926:020","id":"2","description":"ghy","name":"fhh"}, {“日期”:“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&lt;Data&gt; 回复。

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

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

【讨论】:

    【解决方案2】:

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

    类名中的链接供参考。

    【讨论】:

      【解决方案3】:

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

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

      您可以找到更多信息,甚至是示例here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多