내가 MongoDB의에서 TwitterStatus 클래스를 직렬화 복원 다음과 같은 문제가, 여기에 MongoDB를 C#을 드라이버 1.8.0.124 및 TweetSharp 2.0을 사용하여 실패한 단위 테스트입니다했다 MongoDB를 Enumerable에서에서 ICollection이 같은 직렬화 복원 :<T>이
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
using System.Linq;
using TweetSharp;
namespace DS.Model.Tests
{
[TestClass]
public class TestMongoSerialization
{
[TestMethod]
public void CanDeserializeTwitterEntitiesFromMongoDB()
{
var server = new MongoClient().GetServer();
MongoDatabase db = server.GetDatabase("test");
var tweets = db.GetCollection<TwitterStatus>("tweetSerialized");
var tweet = Newtonsoft.Json.JsonConvert.DeserializeObject<TwitterStatus>(tweetWithTwitterEntityiesSerialized);
Assert.AreEqual(1, tweet.Entities.Count());
Assert.AreEqual(TwitterEntityType.Url, tweet.Entities.First().EntityType);
tweets.Save(tweet);
Assert.AreEqual(1, tweets.FindAll().Count());
var tweetFromMango = tweets.FindOne(Query<TwitterStatus>.EQ(s => s.Id, 315278676398858240));
Assert.AreEqual(TwitterEntityType.Url, tweetFromMango.Entities.First().EntityType); // throws exception [1]
}
string tweetWithTwitterEntityiesSerialized = @"{""Id"":315278676398858240,""Text"":""TeePublic Funds 22 Designs "",""RetweetedStatus"":null,""created_at"":""2013-03-23T01:47:48Z"",""geo"":null,""Entities"":{""user_mentions"":[],""hashtags"":[],""urls"":[{""url"":""http://t.co/rBGN46rua7"",""expanded_url"":""http://zite.to/10uCED9"",""indices"":[71,93],""EntityType"":2}],""media"":[]},""possibly_sensitive"":false,""Place"":null}";
}
}
예외가 슬로우 아래의 전체 스택 추적은 Enumerable class TwitterEntities does not implement ICollection<T> so it can't be deserialized
입니다.
전체 스택 추적 :
System.IO.FileFormatException: An error occurred while deserializing the Entities property of class TweetSharp.TwitterStatus:
Enumerable class TwitterEntities does not implement ICollection<T> so it can't be deserialized. ---> MongoDB.Bson.BsonSerializationException: Enumerable class TwitterEntities does not implement ICollection<T> so it can't be deserialized.
Result StackTrace:
at MongoDB.Bson.Serialization.Serializers.EnumerableSerializer`1.CreateInstance(Type type)
at MongoDB.Bson.Serialization.Serializers.EnumerableSerializer`1.Deserialize(BsonReader bsonReader, Type nominalType, Type actualType, IBsonSerializationOptions options)
at MongoDB.Bson.Serialization.BsonClassMapSerializer.DeserializeMemberValue(BsonReader bsonReader, BsonMemberMap memberMap)
--- End of inner exception stack trace ---
at MongoDB.Bson.Serialization.BsonClassMapSerializer.DeserializeMemberValue(BsonReader bsonReader, BsonMemberMap memberMap)
at MongoDB.Bson.Serialization.BsonClassMapSerializer.Deserialize(BsonReader bsonReader, Type nominalType, Type actualType, IBsonSerializationOptions options)
at MongoDB.Bson.Serialization.BsonClassMapSerializer.Deserialize(BsonReader bsonReader, Type nominalType, IBsonSerializationOptions options)
at MongoDB.Bson.Serialization.BsonSerializer.Deserialize(BsonReader bsonReader, Type nominalType, IBsonSerializationOptions options)
가 어떻게이 예외없이 MongoDB를에서 TweetStatus 클래스를 직렬화 할 수 있습니까? 참고 the TwitterEntity classes
감사합니다. TwitterStatus를 MongoDB의 간단한 POCO 클래스로 사용하고 싶었지만 내 간단한 클래스로 매핑해야 할 필요가 있다고 생각합니다. – cDima