У меня действительно странная ситуация, когда я пытаюсь сериализовать объект, возвращенный сторонним API, в JSON. У меня нет никакого контроля над сторонним API или объектом, который он возвращает. C# POCO, который я пытаюсь сериализовать, выглядит примерно так:
public class JobSummary {
public Job Job { get; set; }
}
public class Job {
public Status Status { get; set; }
}
public class Status {
public object JobOutput { get; set; }
public int Progress { get; set; }
}
Исходя из того, что возвращает сторонняя библиотека, я ожидаю, что она сериализуется в следующем порядке. Во время выполнения я могу сказать, что тип JobOutput
- это JObject
, который содержит один ключ (Count) и значение (0).
{
job: {
status: {
jobOutput: {
Count: 0
},
progress: 100
}
}
}
В этом случае работа и статус, очевидно, являются объектами. прогресс - int
, а jobOutput - JObject
.
Если я запускаю любой из следующих вариантов:
JToken.FromObject(jobSummary)
JObject.FromObject(jobSummary)
JObject.Parse(jobSummary)
И ToString()
или JsonConvert.SerializeObject()
В результате я получаю следующий вывод:
{
job: {
status: {
jobOutput: {
Count: []
},
progress: 100
}
}
}
Обратите внимание, что Count стал []
.
Но если я сделаю jobSummary.Status.JobOutput.ToString()
, я правильно верну 0, поэтому я знаю, что POCO, возвращаемое сторонней библиотекой, не искажено и содержит необходимую информацию.
Кто-нибудь знает, что может происходить? Или как правильно сериализовать вложенный JObject?
Edit: Я должен уточнить, что я нахожусь на v6.0.8 из Newtonsoft по причинам, не зависящим от меня, и что сборка третьей стороны, которая содержит в POCO есть неизвестная версия Newtonsoft ILMerged. Я не знаю, имеет ли это отношение.