2015-04-24 1 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; } 
    } 

Вопрос Коллекция В БД:

{ 
"_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, но не был обработан в пользовательском коде

Дополнительная информация: ошибка при десериализации PreRenderedQuestionsList свойства класса Data.QuestionModel: Element «Id» не совпадает с любым полем или свойство класса

Я могу добавить и обновить коллекцию вопросов, но не в состоянии получить данные. Что мне не хватает?

+2

Попробуйте добавить '[BsonElement (" Id ")]' к нему. – CodesInChaos

+0

Ваш Ид - это строка, в то время как вы говорите, что это 'BsonType.ObjectId'. Вероятно, вы должны использовать 'ObjectId' ... – i3arnon

+0

На самом деле, этого не должно быть, по крайней мере, не с драйвером 2.0 - какую версию драйвера вы используете? – mnemosyn

ответ

1

Это поле «Идентификатор» внутри вашего аркаиста поддокумента, что вызывает проблему. Это зарезервированное слово и, следовательно, такое поведение. Отметьте свою модель субдокумента с помощью [BsonNoId] явно, и ваша находка должна работать по назначению.

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

0

В основном эта ошибка возникает, когда свойство в классе под названием «Id». В вашем случае я предлагаю вам изменить имя на свойство «Id» в классе «PreRenderedQuestion». Это сработало для меня.

 Смежные вопросы

  • Нет связанных вопросов^_^