我正在使用C#和JSON.NET。以下是两种类型。
JSON object - var user = { "name": "test", "title": "mytitle"};
JSON String - var user1 = "{ \"name\": \"test\", \"title\": \"mytitle\" }";
使用Newtonsoft.Json反序列化JSON对象。我正在处理JSON的C#代码。
public class sampledata
{
[JsonProperty("name")]
public string name { get; set; }
[JsonProperty("title")]
public string title { get; set; }
}
public void SampleEvent(string param)
{
sampledata s = JsonConvert.DeserializeObject<sampledata>(param);
}
当我在param中获得JSON String时,反序列化很好。但是当我在param中获得JSON对象时 - 我得到的第一个错误是
“无法将当前JSON数组(例如[1,2,3])反序列化为类型'UCRS.MainWindow + sampledata',因为该类型需要JSON对象 (例如{“name”:“value”})正确反序列化。
要修复此错误,请将JSON更改为JSON对象(例如 {“name”:“value”})或将反序列化类型更改为数组或a 实现集合接口的类型(例如ICollection,IList) 像可以从JSON数组反序列化的List。 JsonArrayAttribute也可以添加到类型中以强制它 从JSON数组反序列化。
路径'',第1行,第1位。
所以我将代码更改为:
List<sampledata> s = JsonConvert.DeserializeObject<List<sampledata>>(param);
然后我面临不同的问题
“解析值时遇到意外的字符:o。路径'', 第1行,第1位。“
当在网页中引发某些事件时,我使用webbrowser objectforscripting在c#中处理该事件。我总是将JSON对象作为参数。如何在C#中反序列化JSON对象?请帮忙
答案 0 :(得分:0)
非常简单..适用于两者
string jsonObject = @"{""name"":""test"",""title"":""mytitle""}";
var jsonString = "{ \"name\": \"test\", \"title\": \"mytitle\" }";
var values1 = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonObject);
var values2 = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonString);
这也有效
var values3 = JsonConvert.DeserializeObject<sampledata>(jsonObject);
我创建了JObject
JObject jObject = new JObject
{
{"name", "test" },
{"title", "mytitle" }
};
string jObjectStr = jObject.ToString();
var values = JsonConvert.DeserializeObject<sampledata>(jObjectStr);
答案 1 :(得分:0)
更新后的代码行:
List<sampledata> s = JsonConvert.DeserializeObject<List<sampledata>>(param);
非常好。
这里的问题是当您尝试反序列化到列表时,反序列化器期望一个数组。
尝试将其设为数组。将这行代码添加到param字符串中:
param ="["+param+"]";//make it an array before deserialization
完整代码:
public class sampledata
{
[JsonProperty("name")]
public string name { get; set; }
[JsonProperty("title")]
public string title { get; set; }
}
public void SampleEvent(string param)
{
param ="["+param+"]";//make it an array before deserialization
List<sampledata> s = JsonConvert.DeserializeObject<List<sampledata>>(param);
}