json을 이와 같이 deserialize해야합니다 (DICOM에 정의 된대로 - 국제 표준이므로 형식을 변경할 수 없습니다!)데이터의 속성 값을 기반으로 Json.Net을 사용하여 직렬화 해제 할 객체 유형을 선택하는 방법
{
....
"00080060": {
"Value": [
"US"
],
"vr": "CS"
},
"00080070": {
"Value": [
"ACME Products"
],
"vr": "LO"
},
"00080090": {
"Value": [
{
"AlphabeticName": "Better^Make^U.^MD"
}
],
"vr": "PN"
},
"00081110": {
"Value": [
{
"00080008": {
"Value": [
"XX_0",
"OIU",
null,
"PPP"
],
"vr": "CS"
}
},
{},
{
"00080008": {
"Value": [
"XX_2",
"OIU",
null,
"PPP"
],
"vr": "CS"
}
}
],
"vr": "SQ"
},
긴 목록의 각 속성 (!))의 이름 (위의 예에서 0008XXXX을 갖고, 서브 속성 "VR"및 값을 가진다. 대부분의 경우 Value는 단순히 객체 (문자열 또는 숫자)의 배열이며 괜찮습니다. 그러나 특별한 경우 2 개 (위와 같은 PN 및 SQ)에는 특별한 처리가 필요하며 SQ의 경우 실제로는 최상위 오브젝트를 다시 반복적으로 중첩시킬 수 있습니다. (재귀 적으로 순환 적으로 중첩 될 수 있습니다 ...)
그래서 - "vr"값을 검사하고 사용할 유형을 직렬화 해제하는 동안 간단한 메소드가 필요합니다. 관련된 "가치"에 대해 - 그렇게 할 수있는 간단한 수단이 있습니까? 물론, vr이 Value 이전이나 이후에 올 수 있다는 사실은 원격 구현에 따라 상황을 더욱 복잡하게 만들 수 있습니다 ...
json.net의 ContractResolver 및 JsonConverter 메커니즘을 살펴 봤지만 ContractResolver는 저를 제공하지 않는 것 같습니다. 선택을 할 수 있도록 읽을 데이터에 대한 액세스 및 JsonConverter 파생 클래스는 json.net이 동글 (그렇지 않으면 너무 잘!) 인 것의 대부분을 다시 구현해야하는 것처럼 보일 것입니다 .--(
내가 여기에 몇 가지 분명하고 간단한 해결책을 놓친 거지?
이
이'JObject'는 당신이 필요로하는 것입니다 : 여기
데모입니다 :그래서, 여기 당신이 당신의 JSON 직렬화 얼마나입니다, 모두 함께 넥타이. 불행히도, 나는 그것을 파싱하는 데 충분한 시간이 없다. –