从 Postman 发布 Mongo ObjectId

Posting Mongo ObjectId from Postman

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

public class MyClass
{
    [BsonId]
    public ObjectId Id { get; set; }

    public ObjectId UserId { get; set; }
}

UserId 属于来自另一个集合的 ObjectId 类型。

在 postman 中,我正在尝试 POST 请求正文:

{
    "userId": "5cc082d130b097e86665309d"
}

但我得到:

{
    "userId": [
        "Error converting value \"5cc082d130b097e86665309d\" to type 'MongoDB.Bson.ObjectId'. Path 'userId', line 2, position 39."
    ]
}

我怎样才能 post ObjectId,或者我需要这种类型的 属性 上的一些属性?

谢谢

您收到此异常是因为 Newtonsoft.Json 无法将您发送的字符串转换为 MongoDB 的 ObjectId .要解决此问题,您可以使用 ObjectId.Parse():

实现自己的 JsonConverter 和 运行 转换
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; }
}