2015-04-24 51 views
1

型號:MongoDB中引發異常'System.IO.FileFormatException'反序列化屬性

public class QuestionModel 
    { 
    [BsonId] 
    [BsonRepresentation(BsonType.ObjectId)] 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public string Expression { get; set; } 
    [BsonIgnoreIfNull] 
    public List<PreRenderedQuestion> PreRenderedQuestionsList { get; set; } 
    } 

    public class PreRenderedQuestion 
    { 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public string Expression { get; set; } 
    public string ExpressionWithValues { get; set; } 
    } 

問題集在DB:

{ 
"_id" : ObjectId("5539b948bb63bc0680f29025"), 
"Name" : "addition", 
"Expression " : "a+b", 
"PreRenderedQuestionsList" : [ 
    { 
    "Id" : "5539b948bb63bc0680f29325", 
    "Name" : "addition", 
    "Expression " : "a+b", 
    "ExpressionWithValues " : "5+2" 
    }, 
    { 
    "Id" : "5539b948bb63bc0680f29326", 
    "Name" : "addition", 
    "Expression " : "a+b", 
    "ExpressionWithValues " : "6+9" 
    } 
] 
} 

獲取問題的方法:

function getQuestions(QuestionModel oModel) 
{ 
_query = Query<QuestionModel>.Where(e => e.Is_Deleted == false); 
    _cursor = _collection.Find(_query); 
oModel.QuestionList = new List<QuestionModel>(); 
foreach (QuestionModel ques in _cursor) 
{ 
    oModel.QuestionList.Add(ques); 
} 
} 

當我嘗試找回的問題,我得到以下異常:

型「System.IO.FileFormatException」發生在 MyProj.dll但在用戶代碼

其他沒有處理的例外信息:發生錯誤,而反序列化類Data.QuestionModel的 PreRenderedQuestionsList屬性: 元素「ID」不匹配類的任何字段或屬性

我可以添加和更新問題集,但無法檢索數據。我錯過了什麼?

+2

嘗試添加'[BsonElement(「Id」)]'。 – CodesInChaos

+0

你的ID是一個字符串,而你說它是'BsonType.ObjectId'。你應該使用'ObjectId'來代替... – i3arnon

+0

其實,這不應該發生,至少不是2.0驅動程序 - 你使用的驅動程序版本是什麼? – mnemosyn

回答

1

它是您的子文檔arraylist中造成問題的「Id」字段。這是一個保留字,因此也是這種行爲。明確地標記你的子文檔模型[BsonNoId],你的查找應該按照預期工作。

[BsonNoId] public class PreRenderedQuestion { .... }

0

當在類中的屬性的標題爲「ID」基本上發生錯誤。在你的情況下,我建議你將名稱改爲「PreRenderedQuestion」類中的「Id」屬性。這對我有效。

相關問題