我在使用javascriptserialize方法反序列化json对象时遇到了问题,但有时缺少属性。我是C#新手,这里是json输出:
{"result": [{"id": "1", "inc_group": {"link": "XXX","value": "222"}},{"id": "2","inc_group": ""},{"id": "3","inc_group": {"link": "YYY","value": "654"}}] }
属性inc_group有时可以为空。下面是我的示例脚本:
public class inc_group
{
public string link { get; set; }
public string value { get; set; }
}
public class Result
{
public string id { get; set; }
public inc_group inc_group { get; set; }
}
public class Root
{
public List<Result> result { get; set; }
}
using (WebResponse response = request.GetResponse())
{
Stream responseStream = response.GetResponseStream();
using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8))
{
string json = reader.ReadToEnd();
var json_Dictionary = js.Deserialize<Root>(json);
下面是错误消息: extract JSON 2: System.InvalidOperationException: object to convert a object type 'System.String‘to 'ScriptMain+Inc_Group’
反序列化json时出现此错误。
提前感谢您的帮助
发布于 2020-07-22 16:49:52
你可以试试下面的类
public class Result
{
public string id { get; set; }
public object inc_group { get; set; }
}
public class Root
{
public List<Result> result { get; set; }
}
Root items = JsonConvert.DeserializeObject<Root>(json);
使用JavaScript反序列化
JavaScriptSerializer js = new JavaScriptSerializer();
Root items = js.Deserialize<Root>(json);
我已经尝试了上面的类和它的解析Json,并转换为C#对象,没有任何错误。
如果使用的是JavaScriptSerializer,则解析数据的过程如下所示
foreach (var item in items.result)
{
dynamic obj = item.inc_group;
if (obj is string)
{
string strValue = obj;
}
else
{
foreach (KeyValuePair<string, object> kvp in obj)
{
Console.WriteLine("Key = {0}, Value = {1}",
kvp.Key, kvp.Value);
}
}
}
如果您使用的是NewtonSoft JsonConvert.Deserialize方法,那么它将是这样的。
foreach (var item in items.result)
{
dynamic obj = item.inc_group;
if (obj is string)
{
string strValue = obj;
}
else
{
string link = obj.link;
string value = obj.value;
}
}
发布于 2020-07-22 10:47:52
在Result
定义中,放入public inc_group? inc_group
以表明该字段为nullable,因此不必总是包含值,反序列化应该可以工作。
同时将set JsonSerializerOptions.IgnoreNullValues setting设置为true。
https://stackoverflow.com/questions/63032256
复制相似问题