- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个 .Net (C#) 应用程序通过 Mongo 传递“消息”。一个是作家,另一个是读者。 _t 类型鉴别器导致我出现反序列化问题。
这是他们用来通信的通用类的简化版本:
public class MyMessage {
public long Id {get; set;}
public string MessageText {get; set;}
public dynamic OriginalObject{get; set;}
}
Writer 应用实际上是通过映射Reader 应用未知的其他类型的值来创建 MyMessage 的实例。它映射出已知的公共(public)元素,然后将整个原始对象分配给动态的 OriginalObject 属性。
public MyMessage CreateMessage(SomeOtherType originalMsg) {
return new MyMessage {
MessageText = originalMsg.SomeField,
OriginalObject = originalMsg
};
}
当 .Net Mongo 驱动程序序列化 MyMessage 时,它会将 _t 类型鉴别符添加到 OriginalObject 子文档。
但是,Reader 应用并未引用Writer 引用的所有类型。当 Reader 应用程序尝试反序列化 MyMessage 时,只要 OriginalObject 是它的类型,它就会抛出 Unknown discriminator value
错误没有。
我读到,只要实际类型与标称类型不匹配,就会添加 _t 类型鉴别器。这在真正的多态、强类型场景中是有意义的。但现在 C# 具有动态类型,我想使用它。
此外,如果 MyMessage.OriginalMessage 的实例是纯匿名类型,它也能完美运行。没有编写 _t 类型鉴别器。 Reader 应用愉快地将其反序列化为动态 (expando) 对象,一切正常。只有当 OriginalMessage 的实例是某种强类型时,我才会遇到这个问题。
如何告诉 Mongo 驱动程序不要为动态类型添加 _t 类型鉴别器?我也对其他解决方案/解决方法感兴趣,但简单地排除 _t 将是我的首选方法。
.Net Framework 4.6.1, MongoDB.Driver 2.2.3
更多示例代码:
public void SaveMessages()
{
var message1 = new MyMessage {
Id=1,
MessageText="Anonymous Message",
OriginalMessage=new{ Field1 = "f1", Field2 = "f2" }
};
_collection.InsertOne(message1); // no _t since OriginalMessage is purely anonymous
var message2 = new MyMessage {
Id=2,
MessageText="Strong Message",
OriginalMessage=new SomeOtherType{Prop1="p1", Prop2="p2"}
};
_collection.InsertOne(message2); // has _t since SomeOtherType is not "dynamic"
}
最佳答案
您可以使用 Project
在获取时排除项目,如下所示:
return await this.GetCollection()
.Find(filter: new BsonDocument("_id", handle))
.Project(Builders<BsonDocument>.Projection.Exclude("_t"))
.FirstAsync();
关于c# - MongoDB 驱动程序 2.2 的动态类型 - 如何不序列化 _t 类型鉴别器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37164317/
我写了一段代码,在比特流中连续 6 个“1”后添加一个“0”。但是如何解码呢? 这里是一个比特流的例子: original = {01101111110111000101111110001100...
我是一名优秀的程序员,十分优秀!