2014-05-12 123 views
12

我已經閱讀了兩篇關於反序列化錯誤的文章,但是我沒有得到任何地方,所以我發佈了自己的問題。JSON反序列化類型不支持數組的反序列化

我有一個返回JSON的WCF服務。在對特定類型進行反序列化後,它會失敗。

爲了讓您輕鬆地複製錯誤,我在硬編碼下面的JSON以及調用。

基本上你應該能夠複製/粘貼下面的代碼,並看到它失敗。

消費者需要將其反序列化爲工作對象。 s.Deserialize失敗並顯示標題中提到的錯誤消息。

注:我意識到我的JSON中有斜槓。那些是爲了方便逃避報價。謝謝。

示例代碼:

var s = new JavaScriptSerializer(); 

     var jstr = 
      "[{\"UserId\":1,\"WorkoutId\":1,\"WorkoutInfo\":[\"Step 1\",\"Step 2\"]},{\"UserId\":2,\"WorkoutId\":2,\"WorkoutInfo\":[\"Step 1a\",\"Step 2a\"]},{\"UserId\":5,\"WorkoutId\":0,\"WorkoutInfo\":[\"new work1\",\"new work 1\",\"new work 1\"]}]"; 

     Workout blah = s.Deserialize<Workout>(jstr); 
     var response = ServicePOST<Workout>("AddUserWorkout", workout); 

和鍛鍊類:

public class Workout 
{ 
    public int UserId { get; set; } 
    public List<string> WorkoutInfo { get; set; } 
} 

回答

36

的問題是,你告訴它只是一個單一的Workout,而不是它們的列表/陣列串行。這工作:

var blah = s.Deserialize<List<Workout>>(jstr); 

這是不直接關係到你的問題,但如果可能的話,我建議你使用Json.NET代替JavaScriptSerializer

+0

這最終成爲我從我的WCF服務器配置響應的一個愚蠢的錯誤。我因爲一些愚蠢的原因返回了列表。 這幫我看到了。在1分鐘限制結束後接受答案。 謝謝 – tronious