>

C # (VS2017 사용)을 사용하여 JSON을 처음 사용합니다. 코드를 통해이 객체의 각 요소에 액세스하려고했습니다 (예 : "Obj1" 문자열 가져 오기) "Obj2" "Obj3"  그런 다음 각 구성원의 값 (ID 및 이름)

나는 얼마나 많은 "ObjX"가 있을지 또는 그들의 이름을 미리 모른다. 이 목록을 일부 클래스에로드 한 다음 CSV (또는 SQL 삽입)로 변환하려고합니다.

JSON.net과 JsonFx를 사용해 보았지만 무차별 문자열 조작 함수 이외의 방법을 이해하기에는 기술이 충분하지 않다고 생각합니다. 누구든지 도와 줄 수 있습니까?

{  
"OBJ1":{  
      "id":1,
      "name":"Name1",
},
"OBJ2":{  
      "id":2,
      "name":"Name2",
},
"OBJ3":{  
      "id":3,
      "name":"Name3",
}
}

  • 답변 # 1

    int ID와 문자열 이름이라는 두 가지 속성을 가진 MyClass 클래스를 만듭니다.

    public class MyClass
    {
        public int Id {get; set;}
        public string Name {get;set;}
    }
    
    

    그런 다음, 원하는 방법에 따라 사전에 역 직렬화를 해제하거나 MyClass 속성이 세 개인 MyClassRoot 객체를 만들 수 있습니다.

    사전 접근 방식을 권장합니다. 사전 접근 방식을 사용하면 JSON에 더 많은 속성이 추가되면 코드가 계속 작동합니다. MyClassRoot 를 사용하는 경우  솔루션은 json이 업데이트되면 해당 속성을 MyClassRoot에 추가해야합니다.

    JSON.Net을 사용하면 이와 같이 객체를 직렬화 해제 할 수 있습니다.

    var result = JsonConvert.DeserializeObject<Dictionary<string, MyClass>>(json);
    
    

    "OBJ1", "OBJ2"등이 사전의 키가되고 다음과 같은 값에 액세스 할 수 있습니다.

    var obj1 = result["OBJ1"];
    var obj1Name = obj1.Name;
    var obj1Id = obj1.Id;
    
    
    모든 MyClass 를 얻으려면  개체를 목록에 추가하려면 다음을 수행하십시오.

    var list = result.ToList();
    
    

    MyClassRoot 접근 방식 (POC 만 권장하지는 않음) :

    public class MyClassRoot
    {
        public MyClass Obj1 {get;set;}
        public MyClass Obj2{get;set;}
        public MyClass Obj3{get;set;}
    }
    var result = JsonConvert.DeserializeObject<MyClassRoot>(json);
    var obj1Name = result.Obj1.Name;
    var obj1Id = result.Obj1.Id;
    
    

관련 자료

  • 이전 javascript - HTML5 입력 유형 파일 오류 처리
  • 다음 javascript - 이 카드를 올바르게 팽창시키는 방법?