JSON.NET-Cast-Fehler beim Serialisieren von Mongo ObjectId

Ich bin Herumspielen mit MongoDB und haben ein Objekt mit einer mongodb ObjectId.
Wenn ich serialise diese mit der .NET Json () - Methode, alles ist gut (aber die Termine sind schrecklich!)

Wenn ich versuche diese mit der JSON.NET serialiser es gibt mir eine InvalidCastException, wenn Sie versuchen zu serialise die ObjectID

irgendwelche Ideen, was ist passiert und wie kann ich dieses Problem beheben?

using MongoDB.Driver;
using MongoDB.Bson;
using Newtonsoft.Json;

//this is a route on a controller
   public string NiceJsonPlease()
    {

        var q = new TestClass();
        q.id = new ObjectId();
        q.test = "just updating this";

        return JsonConvert.SerializeObject(q);
    }

    //simple test class
    class TestClass
    {
        public ObjectId id; //MongoDB ObjectID
        public string test = "hi there";
    }


Exception Details: System.InvalidCastException: Specified cast is not valid.

Wenn Sie ändern Sie die controller-Methode zu verwenden, die serialisierungskomponente, die Schiffe mit .NET, funktioniert es (aber das gibt hässliche Termine, blugh)

public JsonResult NiceJsonPlease()
    {

        var q = new TestClass();
        q.id = new ObjectId();
        q.test = "just updating this";

        return Json(q, JsonRequestBehavior.AllowGet);
    }
Kommentar zu dem Problem
ah, die alte Json-Daten Ausgabe: hanselman.com/blog/... Kommentarautor: Liam
@Liam Hallo Liam, habe ich eigentlich gelesen, dass der blog heute früher und ist sozusagen der Grund, ich bin diese Frage zu stellen. JSON.NET gibt mir das schönere Datum, aber wenn ich die MongoDB ObjectID in meinem Modell und versuchen, es zu serialisieren mit JSON.NET es Fehler. Kommentarautor: Keeno
Können Sie zeigen Sie Ihren code? Kommentarautor: Liam
Ich hatte ähnliches problem beim verwenden atribute [BsonDefaultValue(0)] über Eigentum und Nutzung ProjectionDefinition, um Daten form MongoDB [BsonDefaultValue(0)] public long SomePropery; Lösung entfernen atribute. Kommentarautor: Stanislav Prusac

InformationsquelleAutor der Frage Keeno | 2013-05-20

Schreibe einen Kommentar