[英]Automatically retun mongodb ObjectId as string with Json.NET in MVC
我有一個MVC .net項目,我正在使用mongodb。 在我的一些控制器中,我使用ObjectId返回JsonResult。 我希望ObjectId被序列化為字符串。 我發現了類似的問題並使用了這個答案, 在序列化Mongo ObjectId時使用自定義JsonConverter
: JSON.NET強制轉換錯誤
但是,當我嘗試返回一個JsonResult
(使用return Json(myObject)
)時, JsonConverter
不會調用JsonConverter
。
當我使用return JsonConvert.SerializeObject(myObject);
返回一個字符串時JsonConvert.SerializeObject(myObject);
到達JsonConverter
並成功。
我錯過了什么? 謝謝!
想出一個解決方案,希望它會幫助別人。 基本上在控制器中而不是返回MVC的JsonResult,我返回了Newtonsoft的JObject。
我的班級看起來像這樣:
using MongoDB.Bson;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public class StubClass
{
[JsonConverter(typeof(ObjectIdConverter))]
public ObjectId Id { get; set; }
}
JsonConverter類看起來像這樣:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.