【发布时间】:2019-11-29 03:30:40
【问题描述】:
要求
我正在尝试构建一个将 json 字符串作为输入的函数。并输出对象列表。 json 字符串的格式与此类似:
{\"custlist\":[{\"cust_name\":\"Vincent\",\"cust_id\":\"klq:206f387:2d08m92t6\"},{\"cust_name\":\"Joyce\",\"cust_id\":\"125g:1474grx:2d03t9dld\"}]}
我的搜索
有很多解决方案将 json 数组反序列化为对象列表,但数组从字符串的开头开始。即没有 \"custlist\": 部分
如果我们在 json 字符串中有 \"custlist\": 部分,那么这些解决方案就会中断。
我的代码
这是我的 C# 代码。它正在工作,但我必须使用正则表达式来匹配输入字符串。似乎过于复杂。必须有更简单的方法。有知道的请指教
public void Test()
{
string str = {\"custlist\":[{\"cust_name\":\"Vincent\",\"cust_id\":\"klq:206f387:2d08m92t6\"},{\"cust_name\":\"Joyce\",\"cust_id\":\"125g:1474grx:2d03t9dld\"}]};
List<Customer> list = Json2List<Customer>(str);
foreach (Customer c in list)
{
console.writeline ("name=" + c.cust_name);
console.writeline ("id=" + c.cust_id);
}
}
public List<T> Json2List<T>(string s)
{
string json_listname = Regex.Match(s, "\"" + @"(\w+?)" + "\":").Groups[0].Value;
JObject jObject = JObject.Parse(s);
List<JToken> jTokenList = jObject.GetValue(json_listname).ToList();
List<T> LstT = new List<T>();
foreach (JToken jt in jTokenList)
{
T obj = jt.ToObject<T>();
LstT.Add(obj);
}
return LstT;
}
public class Customer
{
public string cust_name { get; set; }
public string cust_id { get; set; }
}
【问题讨论】:
-
谷歌
Newtonsoft.Json -
.NET BCL 也有一个 DataContractJsonSerializer
-
@zaitsman,我已经在使用 newtonsoft.json。否则,我的代码中不会有 jObject 和 jToken 。虽然可能有更好的方法来使用它们,我正在寻找。
标签: c# json deserialization