在MVC中使用Json.NET自动将mongodb ObjectId重新调整为字符串 [英] Automatically retun mongodb ObjectId as string with Json.NET in MVC

查看:248
本文介绍了在MVC中使用Json.NET自动将mongodb ObjectId重新调整为字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个MVC .net项目,并且正在使用mongodb. 在我的某些控制器中,我返回带有ObjectId的JsonResult.我希望将ObjectId序列化为字符串. 我发现了类似的问题,并使用自定义JsonConverter来使用此答案: 序列化Mongo ObjectId时JSON.NET转换错误

I have a MVC .net project, and I am using mongodb. In some of my controller I return JsonResult with ObjectId. I want the ObjectId to be serialized as string. I found a similar problem and used this answer, using a custom JsonConverter : JSON.NET cast error when serializing Mongo ObjectId

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

However when i try to return a JsonResult (using return Json(myObject)) the JsonConverter is not called at all.

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

When i return a string using return JsonConvert.SerializeObject(myObject); the JsonConverter is reached and is successful.

我想念什么? 谢谢!

推荐答案

想出了一个解决方案,希望对您有所帮助. 基本上在控制器中,而不是返回MVC的JsonResult,我返回了Newtonsoft的JObject.

Figured a solution, hope it will help someone. Basically in the controller instead of returning MVC's JsonResult, I returned the Newtonsoft's JObject.

我的课看起来像这样:

using MongoDB.Bson;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public class StubClass 
{
    [JsonConverter(typeof(ObjectIdConverter))]
    public ObjectId Id { get; set; }
}

JsonConverter类如下:

The JsonConverter class looks like this:

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;
        }

这篇关于在MVC中使用Json.NET自动将mongodb ObjectId重新调整为字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆