2014-10-14 5 views
-1

나는직렬화 중첩 된 JSON 객체는

{"CategoryID":"1","CountryID":"1","CountryName":"United Arab Emirates", 
"BillerID":"23","AccountNo":"1234567890", 
"Authenticators":"{\"ConsumerNumber\":\"1234567890\",\"LastBillDate\":\"14-10-2014\",\"LastBillDueDate\":\"24-11-2014\"}", 
"ShortName":"0000000001"} 

내가

UserContext obj1 = Deserialize<UserContext>(context); 
으로 C#에서 각 요소의 값을 얻을 수 있습니다

[Serializable] 
    public class UserContext 
    { 
     public string CategoryID { get; set; } 
     public string BillerID { get; set; } 
     public string AccountNo { get; set; } 
     public string Authenticators { get; set; } 
     public string ShortName { get; set; } 
     public string CountryID { get; set; } 
     public string CountryName { get; set; } 
    } 

와 유사한 C# 클래스를 가지고 자바 스크립트에서 JSON 개체가

그러나 Authenticators은 json 객체를 중첩합니다.이 같은 것이 필요합니다. C#

[Serializable] 
    public class Authenticators 
    { 
     public string ConsumerNumber { get; set; } 
     public string LastBillDate { get; set; } 
     public string LastBillDueDate { get; set; } 
    } 

그래서 내가

string value = obj.ConsumerNumber; 

처럼 각 Authenticators 요소의 각 값을 얻을 수 있다는 것을 나는 값으로 두 개의 클래스를 채우려. 어떻게하면 같은 결과를 얻을 수 있습니까?

+0

Y downvote ...? – Shaggy

답변

1

UserContext 클래스에는 Authenticators라는 문자열 필드가 있고 json 구조는 객체임을 나타냅니다.

요 :

변경

public string Authenticators { get; set; } 

public Authenticators Authenticators { get; set; } 

에 그럼 당신은 중첩 된 객체 인증 자

UserContext obj1 = Deserialize<UserContext>(context); 
var consumerNumber = obj1.Authenticators.ConsumerNumber; 

UPDATE와 함께 정보 UserContext 객체를 직렬화 할 수 있습니다 아마 자바 스크립트 코드를 고쳐야 할 필요가 있습니다. 지금은 UserContext 객체 안에 문자열 필드로 직렬화 된 json 문자열을 저장하고 있습니다.그것은 같아야

var data = 
{ 
    CategoryID:"1", 
    Authenticators: JSON.stringify({ConsumerNumber:"1234567890"}) 
}; 
var json = JSON.stringify(data); 

:

당신은 지금 무엇을 가지고, 비슷한입니다

var data = 
{ 
    CategoryID:"1", 
    Authenticators:{ConsumerNumber:"1234567890"} 
}; 
var json = JSON.stringify(data); 
+0

그러면 'ConsumerNumber'를 어떻게 추출합니까? – Shaggy

+0

''UserContext obj1 = Deserialize (context1);에서 'MyWebApplication.App_Code.Authenticators'를 입력하면 'System.String'유형의 객체를 예외 변환 할 수 없습니다. ' – Shaggy

+0

이 기능은 작동하지 않습니다. 인증자는 문자열입니다. deserialization은 JSON이 이스케이프되므로 객체를 변환하지 않습니다. – MrCode

0

일단 외부 객체를 직렬화 해제했다면 Authenticators JSON 문자열에 다른 직렬화를 실행할 수 있습니다.이 문자열은 이제 obj1의 속성입니다.

Authenticator가 문자열이므로 이스케이프 처리가되므로 외부 개체가 deserialize 될 때까지 deserialize 할 수 없습니다.

Authenticators obj2 = Deserialize<Authenticators>(obj1.Authenticators); 
string value = obj2.ConsumerNumber; 
+0

내 json 문자열에 '인증 자'가 포함되어 있지 않으면 어떻게해야합니까? 일부 오류 처리 메커니즘? – Shaggy

+0

Authenticators 문자열에 'if (obj1.Authenticators! =' ') {}'값이 포함되어 있는지 확인하기 위해 두 번째 직렬화 해제 전에 조건을 추가 할 수 있습니다. 값이 항상 유효한 JSON 문자열이 아닐 수도 있다고 생각하면 try catch를 사용할 수 있습니다. – MrCode

+0

''Authenticators obj2 = Deserialize (obj1.Authenticators); ' – Shaggy

0

단지 변경은

public string Authenticators { get; set; } 

public Authenticators Authenticators { get; set; } 

그때 당신은 단순히

var number = obj1.Authenticators.ConsumerNumber; 

에 의해 내부 개체의 속성에 액세스 할 수 있습니다하지만 난 직렬화 복원 Newtonsoft를 사용할 때 JSON 일부 문제가 있었다 것으로 나타났습니다, 나는

에 JSON 문자열에서 인증 자의 값을 변경했다
'Authenticators':{'ConsumerNumber':'1234567890','LastBillDate':'14-10-2014','LastBillDueDate':'24-11-2014'}, 

그냥 백 슬래시를 제거하십시오.

+0

자바 스크립트에서 JSON 문자열의 구조를 변경할 수 없다는 점에 저는 두려워요. – Shaggy

관련 문제