2011-11-29 28 views
3

如何使用.net格式化对象ID和日期以在json序列化输出中正确显示?如何使用.net格式化对象ID和日期以正确显示json序列化的mongodb数据?

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

呵呵,有趣的是,我确信它会变得轻而易举,但似乎并没有一个简单的答案,如“编写一个转换器并将其插入一个属性”。

我会建议使用第三方像Json.net(它支持自定义转换器),并远离内置的方法。

我曾经写过这样的代码来处理非官方蒙戈驱动程序ID序列化同样的问题 -

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

的建议的字符串,让它工作 – MonkeyBonkey

-1

什么是th e结果变量的数据类型?

将JSON支持构建到C#驱动程序中可能会有更好的结果。试试这个:

var json = result.ToJson(); 

这不会看起来完全像你说的你想要的,但它应该更接近。

+0

的数据类型是MongoDB的对象ID和不知道为什么日期出来找这样的.. 。也许我可以覆盖特定的这两种特定数据类型的json序列化程序? – MonkeyBonkey

+0

实际上看起来更好,现在我只需要让它将内容类型设置为应用程序/ json,当我有控制器返回jsonresult – MonkeyBonkey

+0

仍然是一个问题,因为该序列化程序返回此:“结束”:ISODate(“2021 -11-27T19:00:00Z“)而不是仅仅是日期 – MonkeyBonkey