[英]Reading JSON using JSON.NET
如何使用JSON.NET反序列化以下JSON:
{
"adjusted_amount":200.0,
"amount":2,
"uid":"admin",
"extra_params": {"uid":"admin","ip":"83.26.141.183","user_agent":"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36"}
}
我有以下代码(但问题可能是'extra_params' - 它不是一个字符串)。 我想为'extra_params'创建新类,但问题是'extra_params'中的数据可能会改变。
我根本不需要阅读EXTRA_PARAMS。 我需要的所有信息,我从前3个JSON变量得到。
我的代码:
public class RecData1
{
public string uid { get; set; }
public int amount { get; set; }
public int adjusted_amount { get; set; }
public string extra_params { get; set; }
}
var data = JsonConvert.DeserializeObject<RecData1>(payload);
其中payload =在第一个引号中粘贴的字符串
编辑:我现在得到的错误:
Error reading string. Unexpected token: StartObject. Path 'extra_params', line 1, position 28.
at Newtonsoft.Json.JsonReader.ReadAsStringInternal()
at Newtonsoft.Json.JsonTextReader.ReadAsString()
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader, JsonContract contract, Boolean hasConverter)
您可以使用dynamic
向前迈出一步:
dynamic x = JsonConvert.DeserializeObject(payload);
var data = new RecData1()
{
uid = x.uid,
amount = x.amount,
adjusted_amount = x.adjusted_amount
};
你遇到的第一个问题是adjust_amount不是int,而是小数(也可能出现本地化问题)。
其次,你可以在你的类RecData1中删除字符串extra_params,这将解决它。
{
"adjusted_amount":200,
"amount":2,
"uid":"admin",
"extra_params": {"uid":"admin","ip":"83.26.141.183","user_agent":"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36"}
}
public class RecData1
{
public string uid { get; set; }
public int amount { get; set; }
public int adjusted_amount { get; set; }
//public string extra_params { get; set; }
}
我相信问题是因为你的额外param不是你的json中的字符串。
它应该是这样的:
"extra_params": {"string........................................."}
它应该工作。 或者您需要更改您的类以考虑具有json中所有属性的另一个对象。
如果你想获得extra_params
,你可以试试这个:
public class RecData1
{
public string uid { get; set; }
public int amount { get; set; }
public int adjusted_amount { get; set; }
public Dictionary<string,string> extra_params { get; set; }
}
var data = JsonConvert.DeserializeObject<RecData1>(payload);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.