C# 在MVC中使用Json.NET自动将mongodb 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

我有一个MVC.net项目,我正在使用mongodb。 在我的一些控制器中,我返回带有ObjectId的JsonResult。我希望ObjectId被序列化为字符串。 我发现了一个类似的问题,并使用一个定制的
JsonConverter

但是,当我尝试返回一个
JsonResult
(使用
returnjson(myObject)
)时,根本不会调用
JsonConverter

当我使用return
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; }
}
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;
    }
}

你能展示一些相关的代码吗?