在MVC中使用Json.NET自动将mongodb ObjectId重新调整为字符串 [英] Automatically retun mongodb ObjectId as string with Json.NET in MVC
问题描述
我有一个MVC .net项目,并且正在使用mongodb.
在我的某些控制器中,我返回带有ObjectId的JsonResult.我希望将ObjectId序列化为字符串.
我发现了类似的问题,并使用自定义JsonConverter
来使用此答案:
序列化Mongo ObjectId时JSON.NET转换错误
I have a MVC .net project, and I am using mongodb.
In some of my controller I return JsonResult with ObjectId. I want the ObjectId to be serialized as string.
I found a similar problem and used this answer, using a custom JsonConverter
:
JSON.NET cast error when serializing Mongo ObjectId
但是,当我尝试返回JsonResult
(使用return Json(myObject)
)时,根本不会调用JsonConverter
.
However when i try to return a JsonResult
(using return Json(myObject)
) the JsonConverter
is not called at all.
当我使用return JsonConvert.SerializeObject(myObject);
返回字符串时,达到JsonConverter
并且成功.
When i return a string using return JsonConvert.SerializeObject(myObject);
the JsonConverter
is reached and is successful.
我想念什么? 谢谢!
推荐答案
想出了一个解决方案,希望对您有所帮助. 基本上在控制器中,而不是返回MVC的JsonResult,我返回了Newtonsoft的JObject.
Figured a solution, hope it will help someone. Basically in the controller instead of returning MVC's JsonResult, I returned the Newtonsoft's JObject.
我的课看起来像这样:
using MongoDB.Bson;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public class StubClass
{
[JsonConverter(typeof(ObjectIdConverter))]
public ObjectId Id { get; set; }
}
JsonConverter类如下:
The JsonConverter class looks like this:
using MongoDB.Bson;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public class ObjectIdConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value.ToString());
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
return new ObjectId(token.ToObject<string>());
}
public override bool CanConvert(Type objectType)
{
return typeof(ObjectId).IsAssignableFrom(objectType);
//return true;
}
}
和控制器:
using MongoDB.Bson;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
[HttpGet]
public JObject Index()
{
StubClass c = new StubClass()
{
Id = ObjectId.GenerateNewId()
};
JObject jobj = JObject.FromObject(c);
return jobj;
}
这篇关于在MVC中使用Json.NET自动将mongodb ObjectId重新调整为字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!