2017-01-13 4 views
1

Как разобрать этот json-объект ???C# JObject синтаксический анализ

{{ 
    "track": "t1", 
    "category": { 
     "c1": { 
      "skills": [ 
       "s1" 
      ] 
     }, 
     "c2": { 
      "skills": [ 
       "s1", 
       "s2" 
      ] 
     } 
    } 
}} 

Это то, что я пробовал до сих пор, но пока не понимаю, как это сделать в C#. Это мой первый раз делает C# проектов и еще не в состоянии перейти от JAVA на C#

[HttpPost] 
[Route("api/TCSAPI/SaveTCS")] 
public HttpResponseMessage SaveTCS([FromBody] dynamic tcsObject) 
{ 
    JToken token = JObject.Parse(tcsObject.ToString()); 

    string track = token.SelectToken("track").ToString(); 
    List<JToken> category = token.SelectToken("category").ToList(); 
    foreach (var cat in category) { 
     var data = cat; 
     // dont know after this 
    } 

    return Helper.ComposeResponse(HttpStatusCode.OK, string.Empty); 
} 

ответ

1

Проблема с JSON является {{ и }} поэтому вам нужно обрезать строку JSON, чтобы сделать его { и }

string jsonstr = File.ReadAllText(YourJSONFile); 
jsonstr = jsonstr.Replace("{{", "{"); 
jsonstr = jsonstr.Replace("}}", "}"); 

, а затем вы можете установить Newtonsoft JSON, чтобы обесценить JSON.

Ваш класс sturcture будет выглядеть примерно так

public class C1 
{ 
    public List<string> skills { get; set; } 
} 

public class C2 
{ 
    public List<string> skills { get; set; } 
} 

public class Category 
{ 
    public C1 c1 { get; set; } 
    public C2 c2 { get; set; } 
} 

public class DataItem 
{ 
    public string track { get; set; } 
    public Category category { get; set; } 
} 

Тогда вы можете deseralize это как

var ser = JsonConvert.DeserializeObject<DataItem>(jsonstr); 

Редактировать

Поскольку C1 и C2 являются динамическими вы можете использовать класс как это

public class SomeCat 
{ 
    public List<string> skills 
    { 
     get; 
     set; 
    } 
} 
public class DataItem 
{ 
    public string track 
    { 
     get; 
     set; 
    } 
    public Dictionary<string, SomeCat> Category 
    { 
     get; 
     set; 
    } 
} 

и deseralize это как

string jsonstr = File.ReadAllText(YourJSON); 
jsonstr = jsonstr.Replace("{{", "{"); 
jsonstr = jsonstr.Replace("}}", "}"); 
var ser = JsonConvert.DeserializeObject<DataItem>(jsonstr); 

скриншот, чтобы увидеть, как выглядит данные, и вы можете получить доступ к нему с помощью индекса.

ScreenShot

+0

c1 и c2 динамичен - значит, это не всегда, что это c1 или c2, потому что это основа из того, что я ввода в текстовом поле. также, когда я использую json.GetType(), я получаю тип задания. –

+0

большое спасибо. Другая проблема, как получить доступ к данным в 'var ser'? он сказал, что тип данных динамический –

+1

спасибо, сэр, отлично работает: D –

Смежные вопросы