2016-08-07 46 views
0

如何爲我認爲是非標準Json字段創建Data Transformation Object類?爲非標準Json字段創建DTO

具體我在看的Rackspace Cloud Identity documentation並且有本節:

"token": 
    { 
    "RAX-AUTH:authenticatedBy": [ 
     "PASSWORD" 
      ], 
    "expires": "2014-01-09T15:08:53.645-06:00", 
    "id": "123abc53689b12357897898" 
    } 

在創造我的DTO類條目我會像下面這樣:

public class token 
{ 
    public DateTime expires { get; set; } 
    public string id { get; set; } 
} 

如何在赫克我代表JSON數據字段RAX-AUTH:authenticatedBy,以便序列化處理程序可以正確理解和映射它?

UPDATE:

我原來的問題是序列化的反應,但我意識到我的更大的問題是在請求DTO反序列化:

{ 
    "auth": { 
     "RAX-AUTH:domain": { 
      "name":"Rackspace" 
     }, 
     "passwordCredentials": { 
      "username":"<USERNAME>", 
      "password":"<PASSWORD>" 
     } 
    } 
} 

我測試過建議,但出站JSON有「域「,而不是像API那樣的」RAX-AUTH:domain「所期望的:

[DataContract(Name="auth")] 
public class CloudIdentityAuthRequest 
{ 
    [DataMember] 
    [JsonProperty("RAX-AUTH:domain")] 
    public CloudIdentityDomain domain { get; } 

    [DataMember] 
    public CloudIdentityPasswordCredentials passwordCredentials { get; } 
} 

[DataContract] 
public class CloudIdentityDomain 
{ 
    [DataMember] 
    public string name { get { return "Rackspace"; } } 
} 
+0

請向我們展示您實際執行序列化/發送請求的代碼。我們不知道您使用的是什麼JSON序列化功能。 – JLRishe

+0

我在問建立一個可以與Json.NET一起使用的DTO類... Rackspace API Auth請求/響應具有這個特定的字段'RAX-AUTH:domain'和'RAX-AUTH:authenticatedBy',它們是主要的問題。 – Dscoduc

回答

0

它看起來像那個字段是一個字符串數組。您可以使用DataMember屬性,該屬性名稱映射到你的DTO屬性:

[DataContract] 
public class Token 
{ 
    [DataMember(Name = "RAX-AUTH:authenticatedBy")] 
    public string[] AuthenticatedBy { get; set; } 
    [DataMember(Name = "expires")] 
    public DateTime Expires { get; set; } 
    [DataMember(Name = "id")] 
    public string Id { get; set; } 
} 
+0

我嘗試按照您的建議命名DataMember,但沒有成功。此外,如果其他人正在嘗試你的例子,有一個小小的更正:[DataMember(Name =「...」) – Dscoduc

+0

修正,謝謝。 – user1620220

0

您可以使用Json.NET(從的NuGet下載),你可以做這樣的事情

public class Token 
{ 
    public DateTime expires { get; set; } 
    public string id { get; set; } 
    [JsonProperty("RAX-AUTH:authenticatedBy")] 
    public IEnumerable<string> authenticatedBy { get; set; } 
} 

然後你就可以反序列化就像

var rackSpaceAuth = JsonConvert.DeserializeObject<Token>(tokenjson); 
+1

該屬性不是字符串。 – JLRishe

+0

@JLRishe,是的,編輯。 – Rahul

+0

請看我更新的問題,因爲你給的例子似乎不適合我... – Dscoduc

0

假設屬性將始終是一個字符串數組,並根據您的序列化,你應該能夠做到這一點:

public class token 
{ 
    public DateTime expires { get; set; } 

    public string id { get; set; } 

    [JsonProperty("RAX-AUTH:authenticatedBy")] 
    public string[] authenticatedBy { get; set; } 
} 
+0

請看我更新的問題,因爲你給的例子似乎不適合我... – Dscoduc