从 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; }
}
我在 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()
:
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; }
}