Итак, я пытаюсь контролировать десериализацию, читая json-объект как JObject, удаляя некоторые поля, а затем десериализуя его снова на свой целевой объект, используя Json.Net. Проблема в том, что всякий раз, когда я пытаюсь удалить поле, я получаю сообщение об ошибке:
Необработанное исключение типа Newtonsoft.Json.JsonException ' произошел в Newtonsoft.Json.dll
Дополнительная информация: нельзя добавлять или удалять элементы из Newtonsoft.Json.Linq.JProperty.
Здесь мой (упрощенный, но все же вызывающий ошибку) код:
JToken token = (JToken)JsonConvert.DeserializeObject(File.ReadAllText(fileName));
foreach (JToken inner in token["docs"])
{
if (inner["_id"] != null)
inner["_id"].Remove();
MyObject read = new MyObject();
JsonConvert.PopulateObject(inner.ToString(), read);
Values.Add((MyObject)JsonConvert.DeserializeObject(inner.ToString(), typeof(MyObject)));
}
json - очень большой файл, в котором массив docs содержит много элементов следующим образом (снова упрощен для ясности):
{
"docs": [
{
"Time": "None",
"Level": 1,
"_id": "10208"
},
{
"Time": "None",
"Level": 1,
"_id": "10209"
}
]
}
Альтернативно, если есть лучший способ десериализации JSON для определенного типа, но все же игнорирование дополнительных полей, это была бы прекрасная альтернатива.