0

コマンド オブジェクトを文字列にシリアル化 (および後で逆シリアル化) しようとしています (JavaScriptSerializer を使用することをお勧めします)。コードはコンパイルされますが、コマンド オブジェクトをシリアル化すると、空の Json 文字列、つまり「{}」が返されます。コードを以下に示します。

目的は、コマンド オブジェクトをシリアル化してキューに配置し、後でシリアル化解除して実行できるようにすることです。解決策が .NET 4 で実現できれば、なおさらです。

Iコマンド

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 に答える