2013-03-05 81 views
1

我有一個JSON字符串,例如反序列化JSON到詞典與DataContractJsonSerializer在Windows Phone的

{"timestamp":1362463455, "features" : {"one":true, "two":false}} 

我想DataContractJsonSerializer反序列化到我的類:

[DataContract] 
public class MyClass 
{ 
    [DataMember(Name = "timestamp")] 
    public int Timestamp { get; set; } 

    [DataMember(Name = "features")] 
    public Dictionary<string, bool> Features { get; set; } 
} 

但是我有一個錯誤正在處理"ArgumentException"。我有反序列化Dictionary的問題,如果反序列化只有時間戳,那麼我沒有錯誤。我認爲這是字典最合適的結構。但它不起作用。我檢查了this answer on SO,但Dictionary<string, object>不起作用。 也許是因爲例如使用:

DataContractJsonSerializerSettings settings = 
     new DataContractJsonSerializerSettings(); 
settings.UseSimpleDictionaryFormat = true; 

但我不能在Windows Phone的使用DataContractJsonSerializerSettings

對不起,如果我的問題是雙倍的。

感謝提前。

+0

你有沒有找到任何答案? – 2013-12-23 22:57:30

+0

是的,現在我使用Json.NET http://james.newtonking.com/json。 JsonConvert.DeserializeObject (json); – Alexandr 2013-12-24 05:10:49

+0

好的,謝謝.. – 2013-12-28 14:16:22

回答

0

@Alexandr

我寫你的代碼它會幫助你從JSON反序列化對象yourClassCustomObject。

private async Task<List<MyClass>> MyDeserializerFunAsync() 
{ 
    List<MyClass> book = new List<MyClass>(); 
    try 
    { 
     //I am taking my url from appsettings. myKey is my appsetting key. You can write direct your url. 
     string url = (string)appSettings["mykey"]; 
     var request = HttpWebRequest.Create(url) as HttpWebRequest; 
     request.Accept = "application/json;odata=verbose"; 
     var factory = new TaskFactory(); 
     var task = factory.FromAsync<WebResponse>(request.BeginGetResponse,request.EndGetResponse, null); 
     var response = await task; 
     Stream responseStream = response.GetResponseStream(); 
     string data; 
     using (var reader = new System.IO.StreamReader(responseStream)) 
     { 
      data = reader.ReadToEnd(); 
     } 
     responseStream.Close(); 
     DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(List<MyClass>)); 
     MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(data)); 
     book = (List<MyClass>)json.ReadObject(ms); 
     return book; 
    } 
} 

上面的代碼是在我的wp8應用程序工作,它是更快,你可以嘗試,它會幫助你。我正在執行異步操作,但您可以使用MyClass返回類型創建簡單的方法。

+0

如果上面的代碼正在爲你工作,請接受作爲答案。 – 2014-03-27 07:13:17

相關問題