Краткий ответ НЕВОЗМОЖЕН, IMO то, о чем вы просите, НЕВОЗМОЖНО и не имеет ничего общего с API.
ИМО у вас есть 3 варианта либо используйте
- динамический тип
- пользовательский тип объекта
- Тип словаря
Как упоминается в этом ответе,
Какова бы ни была причина, по которой вы хотите это сделать, причина проста: JObject реализует IDictionary, и Json.NET обрабатывает этот случай особым образом. Если ваш класс реализует IDictionary, Json.NET не будет просматривать свойства вашего класса, а вместо этого будет искать ключи и значения в словаре. Итак, чтобы исправить ваше дело, вы можете сделать это
Давайте узнаем некоторые подробности:
Чтобы доказать мою первую точку зрения, попробуйте просто создать простое консольное приложение с newton.json с вашим вводом в виде строки:
var input = "{\"Bye\": \"string\"}";
С динамическим он будет работать нормально:
var result = JsonConvert.DeserializeObject<dynamic>(input);
Console.WriteLine(JsonConvert.SerializeObject(result));
Теперь с настройкой объекта, например:
public class TestMe
{
public string Bye { get; set; }
}
а также
var result = JsonConvert.DeserializeObject<TestMe>(input);
Console.WriteLine(JsonConvert.SerializeObject(result));
Тоже отлично работает.
Теперь давайте рассмотрим ваш подход:
public class TestMe : JObject
{
}
Тестируя его следующим образом, он сломается:
var result = JsonConvert.DeserializeObject<TestMe>(input);
Console.WriteLine(JsonConvert.SerializeObject(result));
Теперь давайте попробуем со словарем:
public class TestMe
{
[JsonExtensionData]
public Dictionary<string, JToken> MyProperties { get; set; } = new Dictionary<string, JToken>();
}
И проверить это
var result = JsonConvert.DeserializeObject<TestMe>(input);
Console.WriteLine(JsonConvert.SerializeObject(result));
Уилл тоже работает нормально.
Сейчас я представил 3 варианта.
person
maytham-ɯɐɥʇʎɐɯ
schedule
01.02.2021