我有一个 MVC .net 项目,并且正在使用 mongodb。
在我的一些控制器中,我返回带有 ObjectId 的 JsonResult。我希望将 ObjectId 序列化为字符串。
我发现了类似的问题并使用了这个答案,使用自定义JsonConverter
:
序列化 Mongo ObjectId 时 JSON.NET 转换错误 https://stackoverflow.com/questions/16651776/json-net-cast-error-when-serializing-mongo-objectid/16693462#16693462
但是当我尝试返回时JsonResult
(using return Json(myObject)
) the JsonConverter
根本没有被调用。
当我使用 return 返回一个字符串时JsonConvert.SerializeObject(myObject);
the 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)