#c# #json #json-deserialization
#c# #json #json-десериализация
Вопрос:
Приведенные ниже данные/примеры являются частью гораздо большего объема сохраняемых данных JSON, в которые я включил только ту часть, которая меняется.
Допустим, в настоящее время у меня есть свойство, и оно сериализуется в хранилище в следующем формате:
Собственность
public Listlt;stringgt; OrgHierarchy { get; set; } = new Listlt;stringgt;();
JSON
{ "OrgHierarchy": [ "Corporate", "Region", "District", "Store" ] }
Теперь нам нужно внести некоторые изменения в это следующим образом
Собственность
public Listlt;OrgHierarchyItemgt; OrgHierarchy { get; set; } = new Listlt;OrgHierarchyItemgt;();
Класс
public class OrgHierarchyItem { public string Key { get; set; } public string Value { get; set; } }
JSON
{ "OrgHierarchy": [ { "Key": "Corporate", "Value": "My Company" }, { "Key": "Region", "Value": "My Region" }, { "Key": "District", "Value": "My District" }, { "Key": "Store", "Value": "My Store" } ] }
Поэтому мне нужно читать как старое и писать как новое. Хотя я мог бы пойти и обновить много данных, чтобы сделать их новым форматом, кажется, что должен быть более простой способ обработки кода, чтобы проверить, является ли это старым форматом, десериализовать его и преобразовать в новый формат, прежде чем снова сериализовать его в хранилище.
Я мог бы динамически читать в JSON и проверять изменяющийся JSON и обрабатывать его таким образом, я мог бы попробовать/перехватить десериализацию в случае, если это старый формат и его нельзя десериализовать.
Я просто ищу лучший способ справиться с этой ситуацией, так как уверен, что другим приходилось сталкиваться с чем-то подобным.
Комментарии:
1. Ну, я бы предпочел обновить все данные, тогда сериализация не будет проблемой. Если вы настаиваете на сериализации. Вы можете проанализировать его
JsonDocument
и получитьOrgHierarchy
свойство, проверитьValueKind
, является ли оноValueKind.Object
, а затем сериализовать его вListlt;OrgHierarchyItemgt;
другое, получить значение в виде строки.2. Может быть полезно добавить
version
поле в данные JSON и использовать значение (или отсутствие значения) для выбора правильных типов десериализации?