2017-09-23 4 views
0

I는 다음과 같이 몇 가지 JSON 문자열을 역 직렬화하고 싶습니다 :JSON의 직렬화 서브 클래스

{"time":1506174868,"pairs":{ 
    "AAA":{"books":8,"min":0.1,"max":1.0,"fee":0.01}, 
    "AAX":{"books":8,"min":0.1,"max":1.0,"fee":0.01}, 
    "AQA":{"books":8,"min":0.1,"max":1.0,"fee":0.01} 
    }} 

AAA, AAX, ... 변화

수백 내가 VS2017에서 클래스로이 JSON을 붙여이있는 곳 나는 모든 클래스가 자신의 이름을 제외한 동일하기 때문에 클래스 선언의 수백을 피하려고 것

public class Rootobject 
{ 
    public int time { get; set; } 
    public Pairs pairs { get; set; } 
} 

public class Pairs 
{ 
    public AAA AAA { get; set; } 
    public AAX AAX { get; set; } 
    public AQA AQA { get; set; } 
} 

public class AAA 
{ 
    public int books { get; set; } 
    public float min { get; set; } 
    public float max { get; set; } 
    public float fee { get; set; } 
} 

public class AAX 
{ 
    public int books { get; set; } 
    public float min { get; set; } 
    public float max { get; set; } 
    public float fee { get; set; } 
} 

public class AQA 
{ 
    public int books { get; set; } 
    public float min { get; set; } 
    public float max { get; set; } 
    public float fee { get; set; } 
} 

: 다음을 얻는다.

이 배열이나 목록을 serialize하려고했지만 배열이 아니기 때문에 예외가 발생합니다.

저는 Newtonsoft JSON lib를 사용합니다.

는 다음과 같이 객체에 JSON 문자열을 구문 분석 할 수 있습니다, 당신은

답변

1

물론 감사합니다

public class Rootobject 
{ 
    public int time { get; set; } 
    public Dictionary<string, ChildObject> pairs { get; set; } 
} 

public class ChildObject 
{ 

    public int books { get; set; } 
    public float min { get; set; } 
    public float max { get; set; } 
    public float fee { get; set; } 
} 

class Program 
{ 
    static string json = @" 
     {""time"":1506174868,""pairs"":{ 
     ""AAA"":{""books"":8,""min"":0.1,""max"":1.0,""fee"":0.01}, 
     ""AAX"":{""books"":8,""min"":0.1,""max"":1.0,""fee"":0.01}, 
     ""AQA"":{""books"":8,""min"":0.1,""max"":1.0,""fee"":0.01} 
     } 
    }"; 

    static void Main(string[] args) 
    { 
     Rootobject root = JsonConvert.DeserializeObject<Rootobject>(json); 
     foreach(var child in root.pairs) 
     { 
      Console.WriteLine(string.Format("Key: {0}, books:{1},min:{2},max:{3},fee:{4}", 
       child.Key, child.Value.books, child.Value.max, child.Value.min, child.Value.fee)); 
     } 

    } 
+0

네, 해결 내 문제 내로 JToken

var root = JObject.Parse(jsonString); var time = root["time"]; 

2) 구문 분석에 구문 분석합니다. 고마워요. – hkhk

+0

환영합니다. – uyquoc

0

thisextendsthat의 대답은 특정 사건에 대한 괜찮습니다. 그러나, 직렬화 복원을 위해 완전히 동적 옵션이 있습니다 :

1)는 dynamic

dynamic d = JObject.Parse(jsonString); 
var time = d.time; 
+0

나는 역동적 인 버전을 시도했는데 이것 역시 작동합니다. 감사합니다. 또 하나의 질문 : 어린이 대상에서 '책'을 어떻게 얻을 수 있습니까? 열쇠 (AAA, AAX)는 임의의 것일 수 있습니다. 응답에 현재 어떤 것이 있는지 모르겠습니다. – hkhk