2013-06-04 4 views
-1

Могу ли я узнать, как разобрать JSON, как указано ниже ... JSON является частью списка контактов Yahoo OAuth.C# JavaScriptSerializer на JSON, содержащий строку + словарь

JSON:

"fields":[{     
       "id":2, 
       "type":"nickname", 
       "value":"Hello" 
      }, 
      { 
       "id":3, 
       "type":"email", 
       "value":"[email protected]" 
      }, 
      {  
       "id":1, 
       "type":"name", 
       "value":{ 
        "givenName":"Otopass", 
        "middleName":"Test", 
        "familyName":"Hotmail" 
        }, 
      }], 

C# объект:

private class fields 
    { 
     public string id { get; set; } 
     public string type { get; set; } 
     //public string value { get; set; }      //Stuck At Here !!!! 
     //public Dictionary<string, string> value { get; set; } //Stuck At Here !!!! 
    } 

Как разобрать "значение" ?? так как это комбинационный тип словаря String &.

+0

ЗАКАНЧИВАТЬ подобный вопрос HTTP://stackoverflow.com/questions/6416950/serializing-dictionaries-with-javascriptserializer –

+0

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

+0

Возможно, вы захотите изучить десериализатор JSON, который поддерживает тип 'dynamic'. – wgraham

ответ

0

Я не могу ответить на него с помощью JavaScriptSerializer, но вы можете сделать это с помощью json.Net и Linq

var jObj = JObject.Parse(json); 
var fields = jObj["fields"] 
       .Select(x => new Field 
       { 
        Id = (int)x["id"], 
        Type = (string)x["type"], 
        Value = x["value"] is JValue 
          ? new Dictionary<string,string>(){{"",(string)x["value"]}} 
          : x["value"].Children() 
             .Cast<JProperty>() 
             .ToDictionary(p => p.Name, p => (string)p.Value) 
       }) 
       .ToList(); 


private class Field 
{ 
    public int Id { get; set; } 
    public string Type { get; set; } 
    public Dictionary<string, string> Value { get; set; }  
} 

PS: Я установил вашу частичную строку JSON в качестве

string json = 
@"{""fields"":[ 
    {     
     ""id"":2, 
     ""type"":""nickname"", 
     ""value"":""Hello"" 
    }, 
    { 
     ""id"":3, 
     ""type"":""email"", 
     ""value"":""[email protected]"" 
    }, 
    {  
     ""id"":1, 
     ""type"":""name"", 
     ""value"":{ 
      ""givenName"":""Otopass"", 
      ""middleName"":""Test"", 
      ""familyName"":""Hotmail"" 
      } 
    } 
]}"; 
+0

oh .. Спасибо ... Я пытаюсь это прямо сейчас. Является ли 'jObj = Newtonsoft.Json.Linq' ??? Он не содержит определения для 'Select' – user2402624

+0

@ user2402624 Все, что вам нужно, это' использование Newtonsoft.Json; 'и' using Newtonsoft.Json.Linq; ' – I4V

+0

ok, thanks. Я буду работать над этим и обновить свой результат позже. – user2402624

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