CSharp - MongoDb C# 未能序列化响应

  显示原文与译文双语对照的内容
0 0

类( 实体)


public class Entity
{
 public ObjectId Id { get; set; }

 public Entity()
 {
 Id = ObjectId.GenerateNewId();
 }
}

类( 成员)


public class Member : Entity
{
 public string FirstName { get; set; }
 public string LastName { get; set; }
 public string Email { get; set; }
 public string MobileNumber { get; set; }
}

操作


public dynamic Get()
{
 var response = UnitOfWork.MemberRepository.GetMembers();

 return response;
}

我正在使用. NET WebAPI构建一个API并使用mongodb作为数据存储,在数据库中序列化响应对象有些困难。

无法理解为什么,搜索互联网一段时间,发现类似问题没有解决方案。 如果我不是谷歌搜索者,或者答案被隐藏在某个地方:)

完整堆栈跟踪:http://pastie.org/8389787

时间: 原作者:

0 0

这只是猜测,但代码实际上并不太清楚。

我相信这是因为驱动程序的C# to BsonDocument 公开了大量的属性,如 AsBooleanAsIntAsString 。等等 调用不可以转换的数据。 虽然在堆栈跟踪中没有看到它们,但这可能是编译器优化。

一个解决方案是使代码强类型( 如果还没有) 。 我不清楚 UnitOfWork.MemberRepository.GetMembers(); 是,但它隐藏了你正在做的,它也不清楚它返回的内容。 你正在失去 C# 驱动程序的许多优点。 Collection<T> 类几乎是一个存储库 Pattern,已经。

清理方法( 它们不是互斥的) 不是将数据库对象序列化到外部,而是在WebAPI方面使用,并在它们之间转换例如使用 AutoMapper 。 我总是这样做,因为你在抛出一个对象,可以在不知道的序列化中使用db属性。 此外,你经常想隐藏来自外部的某些信息,或者让它只读。

另一个选择是使用 ServiceStack.Text 作为json序列化程序,这在我的经验中会导致更少的麻烦。

原作者:
...