我有一个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>
的更好方法是什么?
您可以使用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();
演示小提琴:https://dotnetfiddle.net/0d2zzh