2016-08-04 1 views
0

У меня есть следующий код, в котором я получаю результат от службы, как показано ниже:Присвоить значение от ответа службы к списку объектов

var result=CallService(); 
response.Alllist = new List<Check> 
       { 
        new Check 
        { 
         Bundle1 = new Bundle 
         { 
          Documents = new List<Document> 
          { 
           new Document(), new Document() 
          } 
         }, 


        }, 
        new CheckList 
        { 
         Bundle1 = new Bundle 
         { 
          Documents = new List<Document> 
          { 
           new Document(), new Document() 
          } 
         }, 
        } 

И я борюсь в присвоении значения этому. А класс ответ

public class Response 
     { 
      [DataMember(Order = 1)] 
      public bool Response { get; set; } 

      [DataMember(Order = 2)] 
      public List<Check> Alllist { get; set; } 
     } 

public class Document 
    { 
     [DataMember(Order = 1)] 
     public string DocumentType { get; set; } 
     [DataMember(Order = 2)] 
     public string DocumentName { get; set; } 

    } 


    public class Bundle 
    { 
     [DataMember(Order = 1)] 
     public string BundleName { get; set; } 
     [DataMember(Order = 2)] 
     public string DocumentCategory { get; set; } 

     [DataMember(Order = 3)] 
     public string NextBundleName { get; set; } 

     [DataMember(Order = 4)] 
     public List<Document> Documents { get; set; } 

    } 


    public class Check 
    { 

     [DataMember(Order = 2)] 
     public string TransactionID { get; set; } 

     [DataMember(Order = 4)] 
     public Bundle Bundle1 { get; set; } 
    } 

И служба возвращает, два экземпляра system.collection.generic.list с несколькими экземплярами. и он возвращает значения BundleName, DocumentCategory, NextBundleName, DocumentType, DocumentName.

Как получить значение результата и присвоить этот ответ? Я пытаюсь назначить как этот

  int count=0; 
      foreach (var c in result) 
      { 
       response.Alllist[count].Bundle1.BundleName = c 
      } 

, но так как результат динамична, я не в состоянии принести ценность как c.BundleName

+1

Это действительно непонятно, о чем вы спрашиваете. –

+0

Ваш сервис возвращает JSON? Если да, то почему бы не использовать DTO? – Rahul

+0

Нет его списка полей, которые возвращает сервис – user3331421

ответ

2

Если response.Alllist является List<Check> как вы продемонстрировали в первом блоке кода, вы можете заполнить значения таким образом:

response.Alllist[0].Bundle1.DocumentCategory = "my category"; 
response.Alllist[0].Bundle1.Documents[0].DocumentName = "my doc name"; 

и так далее.

Кроме этого, я действительно не знаю, что еще вам рассказать. Я предполагаю, что вы знаете об адресе коллекций по индексу и т. Д. Вам просто нужно взглянуть на иерархию композиций классов во втором блоке кода, то есть, какие классы содержат экземпляры или коллекции других классов.

+0

Я имел в виду переменную результата, также список. Поэтому я думал, что для выполнения этого должно быть какое-то циклическое или лямбда-выражение. – user3331421

+0

Не будет ли это исключать NRE или outofrange, поскольку 'response.Alllist' равно NULL – Rahul

+0

@Rahul Возможно, я не понимаю контекст здесь, но первые блоки кода кода вверху иерархии композиции, то есть 'response.Alllist = ...' с инициализаторами объекта, поэтому no ref refs. –

0

Основываясь на моем понимании вашего вопроса, в подобной ситуации я пробовал что-то вроде ниже. Надеюсь это поможет. myclass - это определение класса в моем проекте, содержащем поле.

Guid testGuid = guid.empty; 
using (var client = new HttpClient()) 
     { 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
      HttpResponseMessage response = client.GetAsync(testData.customerAccountURL).Result; 
      if (response.IsSuccessStatusCode) 
      { 
       string JSONResponse = response.Content.ReadAsStringAsync().Result; 
       var rObjects = JsonConvert.DeserializeObject<List<myclass>>(JSONResponse); 
       testGuid = Guid.Parse(rObjects.First().field1.ToString()); 
       // now use this guid to search for a customer 
      } 

      string GuidURL = URL + "/"+ testGuid; 
      var httpWebRequest = (HttpWebRequest)WebRequest.Create(GuidURL); 
      httpWebRequest.ContentType = "application/json; charset=utf-8"; 
      httpWebRequest.Method = "GET"; 
      var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
      using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
      { 
       var result = streamReader.ReadToEnd(); 
       Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(result); 
       string data = values.ElementAt(0).Value; 
      } 
     } 
Смежные вопросы