Есть задача, в которой нужно будет сериализовывать и десериализовывать entity или коллекцию. Стандартное обращение к JsonConvert.SerializeObject не работает сходу, но можно настроить с помощью пользовательских объектов, чтобы отбрасывались лишние свойства. Но DeserializeObject сделать так и не получилось. В доках нашёл функционал в ядре системы, предназначенный для этой задачи. Получился примерно такой код:
public virtual string Serialize(Entity entity)
{
using (var textWriter = new StringWriter())
using (var writer = GetDataWriter(textWriter))
{
entity.WriteData(writer);
return textWriter.ToString();
}
}
public virtual Entity Deserialize(string schemaName, string stringValue)
{
var manager = UserConnection.EntitySchemaManager;
var entitySchema = manager.GetInstanceByName(schemaName);
var entity = entitySchema.CreateEntity(UserConnection);
using (var textReader = new StringReader(stringValue))
using (var reader = GetReader(textReader))
{
entity.ReadData(reader);
return entity;
}
}
protected override DataWriter GetDataWriter(TextWriter textWriter)
{
var settings = new JsonDataWriterSettings()
{
WriteDefValues = false,
QuoteName = false
};
var writer = new JsonDataWriter(settings, textWriter);
return writer;
}
protected override DataReader GetReader(TextReader textReader)
{
var reader = new JsonDataReader(textReader);
return reader;
}
Аналогичный код для EntityCollection.
Сериализация в json таким образом работает. Но немного странно. В результирующей json-строке есть открывающая фигурная скобка, но нет закрывающей.
Десериализация в json не работает вообще. ReadData отрабатывает без исключений, но на выходе получается пустой экземпляр без заполненных колонок. Аналогичная проблема с EntityCollection. Только сама коллекция пустая.
Сериализация в xml оказалась вообще неработоспособной.
У кого-то получалось заставить этот функционал работать? Или может кто нашёл какой-то другой вариант решения задачи?