asp.net - Как получить/десериализовать объект JsonPatchDocument?

Я мог бы сериализовать модель JsonPatchDocument, используя JsonConvert.SerializeObject(), но тип результата — строка, как я могу преобразовать ее в обычный тип массива? Или как получить объект JsonPatchDocument прямо в массив?

var pathSerialized = JsonConvert.SerializeObject(patch);
Console.WriteLine(pathSerialized);

// Result as string: 
// "[{"value":"2018-08-30","path":"/openTo","op":"replace"},{"value":"2018-04-01","path":"/openFrom","op":"replace"}]" 

person Hoàng Nguyễn    schedule 13.06.2018    source источник
comment
гм ... это цель SerializeObject ... он предоставляет вам строковое представление того, что вы ему подаете. Если вы хотите, чтобы эти json-объекты были в отдельном массиве, вам нужно сериализовать их каждый по отдельности, или я что-то пропустил?   -  person X39    schedule 13.06.2018
comment
Я хочу проверить состояние свойств этого объекта, тогда строковый тип проверить это невозможно, поэтому я хотел получить объект. У вас есть решение?   -  person Hoàng Nguyễn    schedule 13.06.2018
comment
Зачем сериализовать его тогда в первую очередь? Почему бы просто не получить доступ к свойствам JsonPatchDocument?   -  person croxy    schedule 13.06.2018
comment
Да я тоже в замешательстве. Вы начинаете с полноценного строго типизированного объекта, преобразуете его в строку JSON, а затем жалуетесь, что не хотите, чтобы это была строка JSON. Затем не преобразовывайте его в строку JSON.   -  person Chris Pratt    schedule 13.06.2018
comment
@croxy Я попытался получить доступ к свойствам напрямую, но затем он вернул ошибку, например JsonPatchDocument does not contain definition of 'path'. Есть ли у вас предложения?   -  person Hoàng Nguyễn    schedule 13.06.2018
comment
Потому что нет. Основываясь на сериализованной строке, patch на самом деле является типом коллекции, а это означает, что вам нужно будет сделать что-то вроде patch[0].path, то есть получить элемент из коллекции сначала, а затем получить доступ к свойству path из него.   -  person Chris Pratt    schedule 13.06.2018
comment
Да, я нуб, мой одноклассник сказал мне, что я должен сначала сериализовать это, но это никуда не денется, тогда я просто задал вопрос здесь.   -  person Hoàng Nguyễn    schedule 13.06.2018


Ответы (2)


Вам вообще не нужно сериализовать объект JsonPatchDocument. Вы можете получить доступ к его свойствам непосредственно через объект. Например, фильтрация по свойству пути:

var elementsWithPath = patch.Operations.Where(o => o.path.Equals("some path"));
person croxy    schedule 13.06.2018

Я думаю, вы хотите что-то сделать с JTokens от Newtonsoft. Пространство имен .Json.Linq. Вы можете преобразовать строку pathserialized в строку JToken с помощью var jToken = JToken.Parse(pathSerializer), а затем исследовать базовые объекты и свойства, перечислив их с помощью var childTokens = jToken.Children().

Одним из этих дочерних токенов будет JObject, который представляет собой Json-представление объекта. Вы можете получить доступ к свойствам JObject с помощью jObject["propertyName"].

person Janilson    schedule 13.06.2018