2012-09-11 42 views
2

當我使用C#驅動程序的MongoDB得到這個問題MongoDB的 - 實體序列確定,但給反序列化

我也有類似的問題,這個(V1.5)錯誤「未找到型串行」當序列化對象時,但始終能夠通過在應用程序啓動過程中使用mongodb註冊實體來解決此問題。它有一個反序列化問題的文檔嵌套在兩個深度級別(即文檔中嵌入的文檔嵌入在文檔中)。

的類是這樣的:

[BsonIgnoreExtraElements] 
public class FooItem : IFooItem 
{ 
    [BsonId] 
    public ObjectId Id { get; set; } 
    public IFooAccessRestrictions AccessRestrictions { get; set; } 
} 

public class FooAccessRestrictions : IFooAccessRestrictions 
{ 
    [BsonId] 
    public ObjectId Id { get; set; } 
    public IAccessPermission[] AccessList { get; set; } 
} 

public class AccessPermission : IAccessPermission 
{ 
    [BsonId] 
    public ObjectId Id { get; set; } 
    public DateTimeOffset CreatedOn { get; set; } 
    public ObjectId CreatedBy { get; set; } 
    public AccessPermissionType Type { get; set; } 
    public string PermittedIdentity { get; set; } 

    public AccessPermission() 
    { 

    } 

    public AccessPermission(ObjectId createdBy, AccessPermissionType type, string permittedIdentity) 
    { 
     CreatedOn = DateTime.Now; 
     CreatedBy = createdBy; 
     Type = type; 
     PermittedIdentity = permittedIdentity; 
    } 
} 

這是它有問題,「發現類型沒有序列化」的AccessPermission類。我試着用MongoDB的註冊實體在應用程序啓動如下:

 BsonClassMap.RegisterClassMap<FooAccessRestrictions>(); 
     BsonClassMap.RegisterClassMap<AccessPermission>(); 

我猜我必須在這裏打破了一些MongoDB的規則,我不知道的。我希望我不需要爲此創建自定義序列化程序......據我所知,除了該文檔嵌套在兩層以外之外,我沒有做過以前沒有做過的任何事情。它正在創建文檔沒有任何問題,只是當我嘗試恢復文檔時,我遇到了問題。

任何幫助將不勝感激。

+0

優秀問題 – solrevdev

回答

1

好吧,我已經設法解決這個問題。

再次查看mongodb文檔後​​,我發現您可以在註冊該類時註冊某個類的屬性。

所以現在我的註冊看起來像這樣:

 BsonClassMap.RegisterClassMap<FooAccessRestrictions>(cm => 
     { 
      cm.MapProperty<List<IAccessPermission>>(c => (List<IAccessPermission>)c.AccessList); 
     }); 

(請注意,我的財產已經從一個數組列表改變,但是這不該;噸對我談論這裏的問題有任何影響)

MongoDB現在可以反序列化這些對象並對它們進行序列化。

+0

沒有其他與此相關的回覆,所以標記爲正確 – soupy1976