C# 从邮递员处投递Mongo ObjectId

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

我在C中使用MongoDb.Driver,我有一个类似这样的模型:

公共类MyClass { [BsonId] 公共对象Id{get;set;} public ObjectId UserId{get;set;} } UserId是来自另一个集合的ObjectId类型

在《邮递员》中,我试图用body发布一个请求:

{
    "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; }
}