1
JArray.Parse()를 통해 C# 개체에 일부 JSON 끝점을 deserialize하고 처리 방법이 확실하지 않은 스키마를 발견했습니다. 아래의 nUnavailResReasonsMap 객체는 동적 인 이름/값 쌍을가집니다. 나는라고하지만 '지고 JSON 변환, 아래 설정이 다른 SO 포스트 당Json Converter를 사용하여 Dictionary에 속성을 추가하십시오.
//Root Level
public class QueueStats
{
public string Id { get; set; }
public string Operation { get; set; }
public VoiceIaqStats VoiceIaqStats { get ; set ; }
}
public class VoiceIaqStats
{
public int Id { get; set; }
public int EsdId { get; set; }
...
public int NUnavailResources { get; set; }
public NUnavailResReasonsMaps NUnavailResReasonsMap { get ; set ; }
public int NWorkResources { get; set; }
public int NSelectedResources { get; set; }
...
public int NSlaPercentageHighThreshold { get; set; }
}
[JsonConverter(typeof(QueueStatsConverter))]
public class NUnavailResReasonsMaps
{
public Dictionary<string ,int > NUnavailResReasonsMap { get; set; }
}
: 이름 값은 모두 정수가 될 것입니다 :
{
"id": "Customer Service",
"operation": "UPDATE",
"VoiceIAQStats": {
"id": 139,
"esdId": 139,
...
"nUnavailResources": 2,
"nUnavailResReasonsMap": {
"4": 1,
"9": 1
},
"nWorkResources": 0,
"nSelectedResources": 0,
...
"nSLAPercentageHighThreshold": 0
}
}
을 그리고 여기 내 C# 개체입니다 위에 정의 된 사전에 값을 가져 오는 방법을 모르겠습니다.
public class QueueStatsConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType.IsClass;
}
public override bool CanWrite => false;
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var instance = objectType.GetConstructor(Type .EmptyTypes)?.Invoke(null);
var props = objectType.GetProperties();
var jo = JObject.Load(reader);
foreach (var jp in jo.Properties())
{
//I can see the properties, but how do I add them to my existing dictionary?
}
return instance;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
이 방법을 사용할 수 있습니까? 아니면 접근 방식을 변경해야합니까?
인가 NUnavailResReasonsMaps가 존재해야하는 이유가 있습니까? 사전 자체를 VoiceIaqStats에 넣을 수있는 것처럼 보입니다. – Dan
다음과 같이 사전을'VoiceIaqStats'에 직접 넣으십시오 :'public class VoiceIaStats {public Dictionary NUnavailResReasonsMap {get; 세트; } ...}'그냥 작동해야합니다. [이름이 ID 인 JSON 객체에서 강하게 유형화 된 C# 객체 생성] (https://stackoverflow.com/q/34213566/3744182) 또는 [불법 C# 식별자를 일으키는 JSON 문자열을 구문 분석하려면 어떻게해야합니까?]를 참조하십시오. https://stackoverflow.com/q/24536533/3744182). –
dbc
네 - 그랬습니다, 도와 줘서 고마워. – slashNburn