2013-03-12 225 views
2
return jsSerializer.Deserialize<MamDataResponseHolder>(stringJson); 

拋出異常:JSON反序列化到對象失敗

類型 'System.String' 的陣列的反序列化不被支持。

但我沒看到問題。

public class MamDataResponseHolder 
    { 
     public MamDataResponsePair[] configuration { get; set; } 
     public string Status { get; set; } 
    } 

    public class MamDataResponsePair 
    { 
     public string id { get; set; } 
     public MamDataResponsecriteria[] criterias { get; set; } 
    } 

public class MamDataResponsecriteria 
    { 
     public Guid criteriaId { get; set; } 
     public string[] domains { get; set; } 
     public string domainsException { get; set; } 
    } 

這裏是JSON:

{ 
     "configuration": [{ 
      "id": "Coupon Body", 
      "criterias": [{ 
       "criteriaId": "c7150fc2-72b9-4628-a199-dd5c0bdeef1b", 
       "domains": [""], 
       "domainsException": [""] 
      }] 
     }], 
     "Status": "succeeded" 
    } 
+0

'「domainsException」:「」]' - 這是序列化作爲數組,但在模型中它是一個字符串 – 2013-03-12 09:00:01

回答

2

您的模型和Json的不匹配。看看domainsException。在你的Json中,它顯然是一個字符串數組,但在你的模型中它只是一個字符串。

除此之外:您確定要在您的Json中使用[""]嗎?這樣你得到一個空字符串而不是空數組的數組。

1

你的類應該有如下:

public class Criteria 
{ 
    public string criteriaId { get; set; } 
    public List<string> domains { get; set; } 
    public List<string> domainsException { get; set; } 
} 

public class Configuration 
{ 
    public string id { get; set; } 
    public List<Criteria> criterias { get; set; } 
} 

public class RootObject 
{ 
    public List<Configuration> configuration { get; set; } 
    public string Status { get; set; } 
} 
+1

爲什麼?絕對不需要重命名這些類,而使用List而不是數組。除此之外,你甚至沒有提到確切的問題。 – JustAnotherUserYouMayKnow 2013-03-12 09:05:45

+0

是的,不需要重命名類,但最好在獲取響應時保持名稱相同,因爲如果稍後再次序列化它,則可以獲得與輸入字符串相同的名稱。 – Popeye 2013-03-12 09:08:30

+0

然後你真的應該在你的回答中提及你的意圖。 – JustAnotherUserYouMayKnow 2013-03-12 09:34:46