2014-02-10 3 views
1

В моей Senario, есть кусок кода, как показано ниже в объекте ответа JSon:JSon Deserialize для хэша

"hashkeys": 
{ 
    "key1":"value1", 
    "key2":"value2", 
    "key3":"value3" 
} 

клавиши, такие как «ключом1», «key2», «Key3», (и даже количество ключей), известны только во время выполнения, но не могут быть определены во время кодирования.

Как я могу кодировать объект JSon для десериализации такого ответа? Я использую язык C# DataContractJsonSerializer.

Мой код проверки:

[DataContract] 
class Test { 
    [DataMember(Name = "hashkeys")] 
    public Dictionary<string, string> dic { get; set; } 

} 

class Program 
{ 
    public static T FromJson<T>(string strJson) where T : class 
    { 
     DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(T)); 
     using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson))) 
     { 
      return ds.ReadObject(ms) as T; 
     } 
    } 

    static void Main(string[] args) 
    { 
     string json = @"{""hashkeys"":{""key1"":""value1"",""key2"":""value2""}}"; 
     Test MyResponse = FromJson<Test>(json); 
     Console.WriteLine(MyResponse); 
    } 
} 
+0

код тестирования кажется работу, если вы измените JSon строку, как это '@ "{" "hashkeys" ": {" "key1" ":" "value1" "," "key2" ":" "value2" "}}" ' – Grundy

+0

Вы правы. Но после десериализации словарь, который мне нужен, не имеет значений. –

ответ

1

вы можете использовать

Сделать Dictionary из string и string как этот

string json = @"{""key1"":""value1"",""key2"":""value2""}"; 
Dictonary<string,string> MyResponse =  JsonConvert.DesirializeObject<Dictionary<string,string>>(json); 
Console.WriteLine(values.Count); 
// 2 
Console.WriteLine(values["key1"]); 
// Value1 

Дополнительные примеры и ссылки Click Here

+0

Спасибо за ответ, Каушик и Марцин. Тип Словарь <строка, строка> хорош для меня. Но я использую DataContractJsonSerializer, а не newtonking json serialize lib. –

+0

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

+1

@WeiquanZhang Deserialization to 'Dictionary ' должен отлично работать с 'DataContractJsonSerializer'. – MarcinJuraszek

1

Deserialize его Dictionary<string, string>.

Это коллекция KeyValuePair<string, string>, с которой вы пытаетесь справиться. "KeyX" станет Key и "valueX" будет Value для словарного энтузиазма.