2016-02-05 3 views
0

У меня есть архитектура микросервисов для решения, которое я разрабатываю с помощью Angularjs, Web Api и DocumentDb. У меня есть простой контроллер, который принимает файл в формате JSON и возвращает его в качестве JObject через провод ... как так ...JSON.NET не конвертируется обратно в JObject

using (StreamReader streamReader = new StreamReader(HostingEnvironment.MapPath(@"~/Json/" + path + ".json"), Encoding.UTF8)) 
      { 
       dtsContent = JObject.Load(new JsonTextReader(streamReader)); 
      } 
      return new IsoncOkResult<JObject>(dtsContent, this) ; 

IsoncOkResult это только мое внедрение IHttpActionResult Вышеперечисленные работы без ошибок .... но когда я делаю этот код на службу вызова ...

var response = (HttpWebResponse)httpWebRequest.GetResponse(); 
var sr = new StreamReader(response.GetResponseStream()); 
var dtsLookup = JObject.Load(new JsonTextReader(sr)); 

я получаю horribe JsonReader CurrentItem не ошибка объекта ...

Я попытался JToken, JArray. ... нет работы ... мне нужно чтобы иметь возможность получить доступ к возвращаемому объекту в C#, как

dtsLookup["name"] 

или что-то ....

Оригинальный JSON является ...

[ { 
"name": "1|Identifiers|ShipName", 
"flag": "1|Flag", 
"ircs": "1|Identifiers|Ircs", 
"flag_reg_number": "1|Identifiers|FlagRegNo", 
"mmsi": "1|Identifiers|Mmis", 
"port_of_registry": "1|Port", 
"date_of_flag_registerd": "1|FirstRegDate", 
"parallel_registry": "1|HistoricalData|ParallelReg", 
"previous_de_registered_date": "1|HistoricalData|PrevDeRegDate", 
"ffa_vid": "1|Identifiers|SecondaryId"}] 

ответ

2

Вашего JSON состоит из массива содержащего один объект:

[{"name1" : "value1", ..., "nameN" : "valueN"}] 

Скобки указывают массив, вложенные фигурные скобки указывают на n объект.

Если вы не уверены, будет ли ваш объект JSON быть вложен в массиве, а просто хотите, чтобы получить первый объект, который появляется в JSON, вы можете сделать:

 var dtsRoot = (JContainer)JToken.Load(new JsonTextReader(sr)); // JContainer is the base class for JArray and JObject 
     var dtsLookup = dtsRoot.DescendantsAndSelf().OfType<JObject>().FirstOrDefault(); 
     var name = (string)dtsLookup["name"]; 

В качестве альтернативы, вы можете использовать SelectToken с .. рекурсивного спуска шаблона, чтобы найти значение первого свойства данного имени, которое появляется в любом месте документа JSON:

 var dtsRoot = JToken.Load(new JsonTextReader(sr)); 
     var name = (string)dtsRoot.SelectToken("..name"); 

SelectToken поддерживает JSONPath query syntax.

+0

Спасибо! Это помогло нагрузкам! – dreadeddev

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