【问题标题】:Automatically retun mongodb ObjectId as string with Json.NET in MVC在 MVC 中使用 Json.NET 自动将 mongodb ObjectId 作为字符串重新调整
【发布时间】:2014-12-05 20:46:08
【问题描述】:

我有一个 MVC .net 项目,我正在使用 mongodb。 在我的一些控制器中,我返回带有 ObjectId 的 JsonResult。我希望将 ObjectId 序列化为字符串。 我发现了一个类似的问题并使用了这个答案,使用了自定义 JsonConverterJSON.NET cast error when serializing Mongo ObjectId

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

当我使用 return JsonConvert.SerializeObject(myObject); 返回一个字符串时,JsonConverter 到达并成功。

我错过了什么? 谢谢!

【问题讨论】:

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

标签: c# asp.net-mvc mongodb json.net


【解决方案1】:

想出了一个解决方案,希望对某人有所帮助。 基本上在控制器中,我没有返回 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;
        }

【讨论】:

    猜你喜欢
    • 2011-12-11
    • 2018-11-09
    • 2017-03-11
    • 1970-01-01
    • 2018-06-09
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    相关资源
    最近更新 更多