Сериализация / десериализация командного объекта
Я пытаюсь сериализовать (а затем десериализовать) объект команды в строку (предпочтительно с использованием JavaScriptSerializer). Мой код компилируется, однако, когда я сериализую свой командный объект, он возвращает пустую строку Json, то есть "{}". Код показан ниже.
Цель состоит в том, чтобы сериализовать объект команды, поместить его в очередь, а затем десериализовать его позже, чтобы он мог быть выполнен. Если решение может быть достигнуто с помощью.NET 4, то тем лучше.
ICommand
public interface ICommand
{
void Execute();
}
Пример команды
public class DispatchForumPostCommand : ICommand
{
private readonly ForumPostEntity _forumPostEntity;
public DispatchForumPostCommand(ForumPostEntity forumPostEntity)
{
_forumPostEntity = forumPostEntity;
}
public void Execute()
{
_forumPostEntity.Dispatch();
}
}
сущность
public class ForumPostEntity : TableEntity
{
public string FromEmailAddress { get; set; }
public string Message { get; set; }
public ForumPostEntity()
{
PartitionKey = System.Guid.NewGuid().ToString();
RowKey = PartitionKey;
}
public void Dispatch()
{
}
}
Пример пустой строки
public void Insert(ICommand command)
{
// ISSUE: This serialization returns an empty string "{}".
var commandAsString = command.Serialize();
}
Метод расширения сериализации
public static string Serialize(this object obj)
{
return new JavaScriptSerializer().Serialize(obj);
}
Любая помощь будет оценена.
1 ответ
Ваш класс DispatchForumPostCommand не имеет свойств для сериализации. Добавьте публичное свойство для его сериализации. Как это:
public class DispatchForumPostCommand : ICommand {
private readonly ForumPostEntity _forumPostEntity;
public ForumPostEntity ForumPostEntity { get { return _forumPostEntity; } }
public DispatchForumPostCommand(ForumPostEntity forumPostEntity) {
_forumPostEntity = forumPostEntity;
}
public void Execute() {
_forumPostEntity.Dispatch();
}
}
Теперь я получаю следующее как сериализованный объект (я убрал наследование TableEntity для целей тестирования):
{"ForumPostEntity":{"FromEmailAddress":null,"Message":null}}
Если вы также хотите десериализовать объект, вам нужно будет добавить открытый установщик для свойства, иначе десериализатор не сможет его установить.