2017-10-04 61 views
1

我有一个JSON内容,如:通用JSON解析器CustomObject

{ 
"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

你会认为是一个 '好' 的办法吗?你目前的方法有什么问题? – gareththegeek

+0

你好加雷思,谢谢你的回应。 –

+0

有没有更好的方法来做到这一点?当我说得更好时,我的意思是更好的方式来处理嵌套内容表示的JSON。 –

回答

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(); 

演示小提琴:https://dotnetfiddle.net/0d2ZzH

+0

看起来更简单。谢谢 –