我在C#中使用MongoDb.Driver,并且具有这样的模型:
public class MyClass
{
[BsonId]
public ObjectId Id { get; set; }
public ObjectId UserId { get; set; }
}
UserId
是另一个集合中的ObjectId
类型。
在邮递员中,我试图发布带有正文的请求:
{
"userId": "5cc082d130b097e86665309d"
}
但是我得到了:
{
"userId": [
"Error converting value \"5cc082d130b097e86665309d\" to type 'MongoDB.Bson.ObjectId'. Path 'userId', line 2, position 39."
]
}
如何发布ObjectId
,或者该类型的属性上需要一些属性?
谢谢
答案 0 :(得分:2)
您将收到此异常,因为 Newtonsoft.Json 无法将您发送的字符串转换为MongoDB的ObjectId
。要解决此问题,您可以实现自己的JsonConverter并使用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());
}
}
然后,您可以使用JsonConverter属性装饰属性:
public class MyClass
{
[BsonId]
public ObjectId Id { get; set; }
[JsonConverter(typeof(StringToObjectId))]
public ObjectId UserId { get; set; }
}