簡體   English   中英

在MVC中使用Json.NET自動將mongodb ObjectId重新編號為字符串

[英]Automatically retun mongodb ObjectId as string with Json.NET in MVC

我有一個MVC .net項目,我正在使用mongodb。 在我的一些控制器中,我使用ObjectId返回JsonResult。 我希望ObjectId被序列化為字符串。 我發現了類似的問題並使用了這個答案, 在序列化Mongo ObjectId時使用自定義JsonConverterJSON.NET強制轉換錯誤

但是,當我嘗試返回一個JsonResult (使用return Json(myObject) )時, JsonConverter不會調用JsonConverter

當我使用return JsonConvert.SerializeObject(myObject);返回一個字符串時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; }
}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM