我有一个JSON内容,如:
{
"ABCD1":[{"gopName":"JHIKJUS"},{"gopName":"LKKJHGYT"}],
"CBFD1":[{"gopName":"HT"},{"gopName":"OP"}]
}
我创建了一个自定义类,即
public class DeskGopMapper
{
public List<string> GopName { get; set; }
public string DeskName { get; set; }
}
需要知道我们如何编写自定义解析器,以便它不应该紧密耦合。
尝试过类似的事情:
class Program
{
static void Main(string[] args)
{
using (var stream = File.OpenRead(@"sample.txt"))
using (var reader = new StreamReader(stream))
{
var line = reader.ReadToEnd();
var rawObj = JObject.Parse(line);
List<DeskGopMapper> map = new List<DeskGopMapper>();
foreach (var obj in rawObj)
{
var m = new DeskGopMapper {DeskName = obj.Key, GopName = new List<string>()};
foreach (var prop in obj.Value)
{
m.GopName.Add(prop["gopName"].ToString());
}
map.Add(m);
}
}
}
}
虽然我不太相信解析方式。
实现将JSON响应解析为List<DeskGopMapper>
的更好方法是什么?
答案 0 :(得分:0)
您可以使用Json.Net的LINQ-to-JSON API来简化您的代码:
string json = File.ReadAllText(@"sample.txt");
List<DeskGopMapper> map = JObject.Parse(json)
.Properties()
.Select(p => new DeskGopMapper
{
DeskName = p.Name,
GopName = p.Value.Children<JObject>()
.Select(j => (string)j["gopName"])
.ToList()
})
.ToList();