Как мне отформатировать идентификаторы и даты объектов, чтобы они правильно отображались в сериализованных данных json mongodb с использованием .net? - PullRequest
3 голосов
/ 30 ноября 2011

Как мне отформатировать идентификаторы и даты объектов, чтобы они правильно отображались в сериализованном выводе json с использованием .net?

return Json(result, JsonRequestBehavior.AllowGet);

и вот вывод, который я получаю

{
  "_id": {
      o "Timestamp": 1321487136,
      o "Machine": 5156,
      o "Pid": -4604,
      o "Increment": 78,
      o "CreationTime": "/Date(1321487136000)/"
  },
"start": "/Date(1321487094000)/",
"end": "/Date(1638039600000)/",

}

Я бы хотел, чтобы json выглядел следующим образом

{
    "_id":"4e483da1e517801b09000004",
    "end":"2012-12-30T05:00:00.000Z",
    "start":"2011-08-14T17:26:57.000Z"
}

Прочитав приведенный ниже совет, получите его с помощью следующего

public class MongoSimpleIdConverter : JsonConverter
    {
        public override bool CanConvert(Type objectType)
        {
            return objectType == typeof(MongoDB.Bson.ObjectId);
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            return new MongoDB.Bson.ObjectId((string)existingValue);
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            writer.WriteValue(((MongoDB.Bson.ObjectId)value).ToString());
        }
    }


 [HttpGet]
        public ContentResult Index()
        {

            var result = JsonConvert.SerializeObject(svc.GetTasks(), new MongoSimpleIdConverter(), new IsoDateTimeConverter());

            return new ContentResult { Content = result, ContentType = "application/json" };
        }

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

Да, интересно, я был уверен, что это будет просто, но не похоже, что есть простой ответ, такой как «Напишите конвертер и подключите его с атрибутом».рекомендую использовать стороннюю систему, такую ​​как Json.net (которая поддерживает пользовательские конвертеры) и держаться подальше от встроенного метода.

Однажды я написал этот код для решения той же проблемы с сериализацией идентификатора в неофициальном драйвере Монго -

public class OidConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(MongoDB.Oid);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        return new MongoDB.Oid((string)existingValue);
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteValue(((MongoDB.Oid)value).ToString());
    }
}
0 голосов
/ 30 ноября 2011

Какой тип данных у вашей переменной результата?

Возможно, вы получите лучшие результаты, если встроите поддержку JSON в драйвер C #. Попробуйте это:

var json = result.ToJson();

Это не будет похоже на то, что вы сказали, что хотите, но оно должно быть ближе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...