C# 从邮递员处投递Mongo ObjectId
我在C中使用MongoDb.Driver,我有一个类似这样的模型: 公共类MyClass { [BsonId] 公共对象Id{get;set;} public ObjectId UserId{get;set;} } UserId是来自另一个集合的ObjectId类型 在《邮递员》中,我试图用body发布一个请求:C# 从邮递员处投递Mongo ObjectId,c#,json,mongodb,json.net,mongodb-.net-driver,C#,Json,Mongodb,Json.net,Mongodb .net Driver,我在C中使用MongoDb.Driver,我有一个类似这样的模型: 公共类MyClass { [BsonId] 公共对象Id{get;set;} public ObjectId UserId{get;set;} } UserId是来自另一个集合的ObjectId类型 在《邮递员》中,我试图用body发布一个请求: { "userId": "5cc082d130b097e86665309d" } 但我得到了: { "userId": [ "Error conver
{
"userId": "5cc082d130b097e86665309d"
}
但我得到了:
{
"userId": [
"Error converting value \"5cc082d130b097e86665309d\" to type 'MongoDB.Bson.ObjectId'. Path 'userId', line 2, position 39."
]
}
如何发布ObjectId,或者我需要此类型的属性上的某些属性
谢谢您收到此异常,因为Newtonsoft.Json无法将您发送的字符串转换为MongoDB的ObjectId。要解决此问题,您可以实现自己的转换并使用ObjectId.Parse运行转换:
出现此异常是因为Newtonsoft.Json无法将发送的字符串转换为MongoDB的ObjectId。要解决此问题,您可以实现自己的转换并使用ObjectId.Parse运行转换:
public class StringToObjectId : JsonConverter
{
public override bool CanConvert(Type objectType) => objectType == typeof(ObjectId);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
return ObjectId.Parse(token.ToObject<string>());
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value.ToString());
}
}
public class MyClass
{
[BsonId]
public ObjectId Id { get; set; }
[JsonConverter(typeof(StringToObjectId))]
public ObjectId UserId { get; set; }
}