2016-04-21 28 views
2

我在C#中測試一些API調用,並得到以下JSON響應:JSON反序列化與空場C#

{ 
    "message": "The request is invalid. Model validation failed.", 
    "validationErrors": { 
    "": { 
     "reasons": [ 
     "A customer must be added to the order before it can be placed." 
     ] 
    } 
    } 
} 

我要地圖這個響應與JSON解串器的類,我管不着瞭解響應如何形成。如何處理validationErrors中的空字段,以便我仍然可以訪問我的對象中的原因列表?

注意:當我通過json2csharp運行它時,它在validationErrors類中爲該字段提供了不太有用的映射。

public __invalid_type__ __invalid_name__ {get;set;} 

回答

3

反序列化到Dictionary<string, ValidationError>

public class ValidationError 
{ 
    public List<string> reasons { get; set; } 
} 

public class RootObject 
{ 
    public string message { get; set; } 
    public Dictionary<string, ValidationError> validationErrors { get; set; } 
} 

這將工作與外的開箱。如果您使用DataContractJsonSerializer(標記爲),則需要設置DataContractJsonSerializer.UseSimpleDictionaryFormat = true(僅限.Net 4.5及更高版本)。

+0

工作!用空鍵訪問一個值並不是我最喜歡的東西,但是api開發人員對此有錯,而不是你。 – allie

2

如果你有自己的類你想deserealization,你可以嘗試使用Newtonsoft-Json通過JsonPropertyAttribute配置您的JSON屬性名稱並設置它喜歡:

public class YourModel 
{ 
    [JsonProperty(name = "") 
    public ValidationErrors { get; set; } 
} 

這裏更多的例子 - link

或者,您可以將您的財產取消爲Dictionary<string, YourErrorObject>,並使用第一個項目來訪問錯誤。