【问题标题】:Cannot Deserialize JSON data returning from .net web service in to C# object in an web application无法将从 .net Web 服务返回的 JSON 数据反序列化到 Web 应用程序中的 C# 对象
【发布时间】:2015-08-31 16:47:00
【问题描述】:

我正在以

的形式从 .Net Web 服务返回 JSON 数据
<string>[{"Response":"78.00"}]</string> 

在另一个 Web 应用程序上,当我尝试将 JSON 字符串反序列化为 C# 对象时,它会引发错误

无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型 'GetData' 因为该类型需要 JSON 对象(例如 {"name":"value"}) 正确反序列化。要修复此错误 将 JSON 更改为 JSON 对象(例如 {"name":"value"})或更改 将类型反序列化为数组或实现集合的类型 接口(例如 ICollection、IList),例如 List 可以 从 JSON 数组反序列化。也可以添加 JsonArrayAttribute 强制它从 JSON 数组反序列化。

我使用的代码如下

protected void Button1_Click(object sender, EventArgs e)
    {
        GetData objGD = new GetData();
        wbRfrnc.TransactionPut obj =new wbRfrnc.TransactionPut();
        string result = obj.GetPoint(TextBox1.Text, TextBox2.Text);
        objGD = JsonConvert.DeserializeObject<GetData>(result);
        Response.Write(objGD.Response); 
    }
public class GetData
{
    public string Response { get; set; }
}

【问题讨论】:

  • 我想将 JSON 字符串 [{"Response":"78.00"}] 的键和值检索到 2 个不同的字符串变量中

标签: c# json


【解决方案1】:

您正在传递一个数组,但只是试图反序列化一个元素。

正确的代码应该是这样的:

protected void Button1_Click(object sender, EventArgs e)
{

    wbRfrnc.TransactionPut obj =new wbRfrnc.TransactionPut();
    string result = obj.GetPoint(TextBox1.Text, TextBox2.Text);
    var objGD = JsonConvert.DeserializeObject<GetData[]>(result);
    Response.Write(objGD[0].Response); 
}

【讨论】:

    【解决方案2】:

    由于您要取回一个数组,因此您需要反序列化为一个数组。

    protected void Button1_Click(object sender, EventArgs e)
    {
        List<GetData> data= new List<GetData>();
        wbRfrnc.TransactionPut obj =new wbRfrnc.TransactionPut();
        string result = obj.GetPoint(TextBox1.Text, TextBox2.Text);
        data = JsonConvert.DeserializeObject<List<GetData>>(result);
        if(data != null && data.Any())
          Response.Write(data.First().Response); 
    }
    

    如果需要,反序列化到列表将允许您添加多个响应,但如果您只需要 1 个响应,最好只发送对象而不是数组。然后你的原始代码应该可以工作并且意图会在代码中表达出来。

    【讨论】:

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