C# 在MVC中使用Json.NET自动将mongodb ObjectId作为字符串重新运行
我有一个MVC.net项目,我正在使用mongodb。 在我的一些控制器中,我返回带有ObjectId的JsonResult。我希望ObjectId被序列化为字符串。 我发现了一个类似的问题,并使用一个定制的C# 在MVC中使用Json.NET自动将mongodb ObjectId作为字符串重新运行,c#,asp.net-mvc,mongodb,json.net,C#,Asp.net Mvc,Mongodb,Json.net,我有一个MVC.net项目,我正在使用mongodb。 在我的一些控制器中,我返回带有ObjectId的JsonResult。我希望ObjectId被序列化为字符串。 我发现了一个类似的问题,并使用一个定制的JsonConverter: 但是,当我尝试返回一个JsonResult(使用returnjson(myObject))时,根本不会调用JsonConverter 当我使用returnJsonConvert.SerializeObject(myObject)返回字符串时到达JsonConv
JsonConverter
:
但是,当我尝试返回一个JsonResult
(使用returnjson(myObject)
)时,根本不会调用JsonConverter
当我使用returnJsonConvert.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; }
}
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;
}
}
JsonConverter类如下所示:
using MongoDB.Bson;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public class StubClass
{
[JsonConverter(typeof(ObjectIdConverter))]
public ObjectId Id { get; set; }
}
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;
}
}
你能展示一些相关的代码吗?