API에서 JSON 응답을 역 직렬화하려고합니다. JSON은 다음과 같습니다 (MAC 주소 및 위치가 변경됨) :알 수없는 객체 이름으로 JSON을 비 직렬화
{
"body" : [{
"_id" : "da:87:54:26:53:97",
"place" : {
"location" : [-23.334961, 47.398349],
"altitude" : 30,
"timezone" : "Europe\/London"
},
"mark" : 3,
"measures" : {
"f2:bf:a7:6f:e7:e8" : {
"res" : {
"1469997248" : [20.4, 66]
},
"type" : ["temperature", "humidity"]
},
"42:b7:48:59:7c:4b" : {
"res" : {
"1469997263" : [1016.7]
},
"type" : ["pressure"]
}
},
"modules" : ["f2:bf:a7:6f:e7:e8"]
}
],
"status" : "ok",
"time_exec" : 0.034152030944824,
"time_server" : 1469997417
}
문제는 측정 블록입니다. 개체의 이름이 변하기 때문에 C# 개체로 올바르게 deserialize하는 방법을 모르겠습니다. I found a similiar problem on here with the solution to use a dictonary, 그러나 내가이 방법을 시도하면 null 디렉토리가 생깁니다.
이 내 역 직렬화하는 방법입니다 :
APIResponse apiResponse = JsonConvert.DeserializeObject<APIResponse>(await content.ReadAsStringAsync());
그리고 이것은 APIResponse 클래스입니다 :
public class APIResponse
{
public Body[] body { get; set; }
public string status { get; set; }
public float time_exec { get; set; }
public int time_server { get; set; }
}
public class Body
{
public string _id { get; set; }
public Place place { get; set; }
public int mark { get; set; }
public Measures measures { get; set; }
public string[] modules { get; set; }
}
public class Place
{
public float[] location { get; set; }
public float altitude { get; set; }
public string timezone { get; set; }
}
public class Measures
{
public Dictionary<string, SingleModule> singlemodules{ get; set; }
}
public class SingleModule
{
public Res res { get; set; }
public string[] type { get; set; }
}
public class Res
{
public MeasuredData measuredData { get; set; }
}
public class MeasuredData
{
public float[] values { get; set; }
}
제대로 쉽게 조치를 derserialize 수있는 방법?
이름이 JSON에서 생성되었으므로 이름이 엉망입니다. 아직 실제로 편집하지 않았습니다. 어쨌든이 솔루션이 작동합니다. 감사! – Niruga
음, 방금 변경된 이름을 가진'res'의 자식 객체에 비슷한 문제가 있다는 것을 눈치 챘습니다. 이 문제를 어떻게 해결할 수 있습니까? – Niruga
@Niruga : 같은 방식으로 다시'Res' 클래스를 없애고'Dictionary'또는'Dictionary >' –