2013-03-07 70 views
0

我試圖將一個命令對象序列化(以及後來的反序列化)爲一個字符串(最好使用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); 
} 

任何幫助,將不勝感激。

+0

'ICommand'只包含一個方法。你期望的序列化結果是什麼? – andri 2013-03-07 09:23:39

+0

您可能(儘管我沒有使用Java序列化程序)需要使用'[Serializable]'標記從'ICommand'繼承的類,並將該類中的每個屬性標記爲'XmlElement'。 – MoonKnight 2013-03-07 09:25:56

+0

DispatchForumPostCommand或從ICommand繼承的另一個對象的字符串表示形式。將對象從隊列中取出並反序列化後,我想將其稱爲Execute命令,其中包含一些基本信息以幫助完成執行。 – Bern 2013-03-07 09:28:15

回答

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

如果要反序列化對象,以及,那麼你將需要爲該屬性添加公共setter,否則解串器將無法設置它。

+0

天才。僅供參考,此方法適用於TableEntity繼承。謝謝@Maarten – Bern 2013-03-07 11:26:08

+0

小錯字我無法編輯,因爲它少於10個字符「必須屬性」=>「沒有任何屬性」 – Bern 2013-03-07 11:27:15

+1

@Bern剛纔也看到了這一點,並予以糾正。 – Maarten 2013-03-07 11:33:03