2011-11-29 63 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

相關問題