0

我正在尝试将命令对象序列化(然后反序列化)为字符串(最好使用 JavaScriptSerializer)。我的代码可以编译,但是当我序列化我的命令对象时,它返回一个空的 Json 字符串,即“{}”。代码如下所示。

目的是序列化命令对象,将其放入队列中,然后反序列化,以便执行。如果可以使用 .NET 4 实现该解决方案,那就更好了。

指令

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);
}

任何帮助,将不胜感激。

4

1 回答 1

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}}

如果您还想反序列化对象,则需要为该属性添加公共设置器,否则反序列器将无法设置它。

于 2013-03-07T10:58:46.577 回答