2016-08-07 2 views
0

비표준 Json 필드로 생각되는 데이터 변환 객체 클래스를 만들려면 어떻게해야합니까? 특히비표준 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의 직렬화에 실현 : 나는 권장 사항을 테스트했지만 아웃 바운드 JSON이있다

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

" 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; } 
} 

같은 것을 수행 할 수 있습니다 할 수있는 deserialize like

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

해당 속성은 문자열이 아닙니다. – JLRishe

+0

@JLRishe, 예, 편집했습니다. – Rahul

+0

당신이 준 예제가 저에게 효과가 없을 것 같아서 업데이트 된 질문을 참조하십시오 ... – Dscoduc

0

이 속성은 항상 문자열 배열이며 serializer에 따라 다음과 같이 할 수 있다고 가정합니다.

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

    public string id { get; set; } 

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

당신이 준 예제가 저에게 효과적이지 않은 것처럼 업데이트 된 질문을 참조하십시오 ... – Dscoduc