Итак, я пытаюсь контролировать десериализацию, читая json-объект как объект JObject, удаляя некоторые поля, а затем десериализуя его снова к моему целевому объекту, используя Json.Net. Проблема заключается в том, в любое время я пытаюсь удалить поле, я получаю ошибку:Получение ошибки «Невозможно добавить или удалить элементы из Newtonsoft.Json.Linq.JProperty» в Json.net
An unhandled exception of type 'Newtonsoft.Json.JsonException' occurred in Newtonsoft.Json.dll
Additional information: Cannot add or remove items from 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 к определенному типу, но по-прежнему игнорируя дополнительные поля, тх t будет прекрасной альтернативой.
Пожалуйста, напишите свой JSON –
. Я не уверен, что это актуально, потому что мы знаем, что внутренний ["id"] не является нулевым, но я все равно поставил его на вопрос. – Miguel