通用的JSON解析器到自定义对象



我有一个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

相关内容

  • 没有找到相关文章

最新更新