如何将Jsonstring反序列化为c#listObject

时间:2015-07-13 14:37:33

标签: javascript c# asp.net json serialization

我正在尝试将Jsonstring反序列化为c#listObject。数据来自javascript:

params = "data=" + JSON.stringify(queryResult.$$rows);      
XHR.setRequestHeader("Content-type", "application/x-www-form-urlencoded");  
XHR.setRequestHeader("Content-length", params.length);      
XHR.setRequestHeader("Connection", "close");
XHR.send(params);

然后在asp.net中尝试使用:

反序列化Jsonstring
public class HomeController : Controller
{
    [HttpPost]
    public ActionResult doWork(string data) 
    {
        var dump = JsonConvert.DeserializeObject<List<RootObject>>(data);
        return new EmptyResult();
    }   
}



public class RootObject
{
    public string data { get; set; }
    public string text { get; set; }
}

如果我查看本地变量数据。我找到了一个有效的jsong字符串:

[  
   [  
      {  
         "data":"Australia",
         "text":"Australia"
      }
   ],
   [  
      {  
         "data":"China",
         "text":"China"
      }
   ],
   [  
      {  
         "data":"Hong Kong",
         "text":"Hong Kong"
      }
   ],
   [  
      {  
         "data":"Indonesia",
         "text":"Indonesia"
      }
   ],
   [  
      {  
         "data":"Netherlands",
         "text":"Netherlands"
      }
   ]
]

当asp.net尝试执行JsonConvert.DeserializeObject&gt;(数据)时; 它将返回一条错误消息:

  

JsonSerializationException未被用户代码处理,例外   输入'Newtonsoft.Json.JsonSerializationException'   newTonisoft.Json.ddl但未在用户代码中处理

     

其他信息:无法反序列化当前的JSON数组   (例如[1,2,3])进入类型'maps.Controllers.RootObject'因为   type需要一个JSON对象(例如{“name”:“value”})来反序列化   正确。

我该如何解决这个问题?这是正确的JavaScript方式吗?

1 个答案:

答案 0 :(得分:1)

string jsonTxt = @"[  
[  
    {  
        ""data"":""Australia"",
        ""text"":""Australia""
    }
],
[  
    {  
        ""data"":""China"",
        ""text"":""China""
    }
],
[  
    {  
        ""data"":""Hong Kong"",
        ""text"":""Hong Kong""
    }
],
[  
    {  
        ""data"":""Indonesia"",
        ""text"":""Indonesia""
    }
],
[  
    {  
        ""data"":""Netherlands"",
        ""text"":""Netherlands""
    }
]
]";
var result = JsonConvert.DeserializeObject<List<RootObject>[]>(jsonTxt);

结果是你的需要