如何为我认为非标准的Json字段创建数据转换对象类?
具体来说,我正在查看Rackspace Cloud Identity documentation并且有这一部分:
"token":
{
"RAX-AUTH:authenticatedBy": [
"PASSWORD"
],
"expires": "2014-01-09T15:08:53.645-06:00",
"id": "123abc5368901230076b12357897898"
}
在创建我的DTO课程条目时,我会有以下内容:
public class token
{
public DateTime expires { get; set; }
public string id { get; set; }
}
我如何表示Json数据字段RAX-AUTH:authenticatedBy,以便序列化处理程序可以理解并正确映射它?
更新:
我原来的问题是序列化响应,但我意识到我的更大问题是请求DTO反序列化:
{
"auth": {
"RAX-AUTH:domain": {
"name":"Rackspace"
},
"passwordCredentials": {
"username":"<USERNAME>",
"password":"<PASSWORD>"
}
}
}
我已经测试了这些建议但是出站的Json有“域”而不是像API期望的“RAX-AUTH:域”:
[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 :(得分: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; }
}
答案 1 :(得分: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);
答案 2 :(得分:0)
假设该属性将始终是一个字符串数组,并且取决于您的序列化程序,您应该能够这样做:
plotly