MongoDB - Servicestack Rest API kein korrektes JSON

  • C#
  • .NET (FX) 4.5–4.8

    MongoDB - Servicestack Rest API kein korrektes JSON

    Hallo.

    Es geht um zwei Probleme.


    Problem 1:
    Ich habe eine lokale MongoDB mit mehreren Collections, die Datenbank
    wird per C# Anwendung angesteuert.

    So sieht ein Datenbankeintrag aus (Ausschnitt):



    Die Verbindung besteht und ich kann auch erfolgreich Elemente aus der Datenbank abfragen.

    Jetzt habe ich jedoch ein Problem und zwar möchte ich JSON Objekte zurückerhalten.


    Meine Config sieht wie folgt aus:


    C#-Quellcode

    1. ​using Funq;
    2. using ServiceStack;
    3. using ServiceStack.Text;
    4. namespace protocol.server.API
    5. {
    6. public class ApiHost : AppSelfHostBase
    7. {
    8. public ApiHost() : base("Api REST Service", typeof(ApiHost).Assembly)
    9. {
    10. }
    11. public override void Configure(Container container)
    12. {
    13. Plugins.Add(new CorsFeature());
    14. SetConfig(new HostConfig
    15. {
    16. DefaultContentType = MimeTypes.Json,
    17. EnableFeatures = Feature.All.Remove(Feature.Html),
    18. UseBclJsonSerializers = true
    19. });
    20. JsConfig.ConvertObjectTypesIntoStringDictionary = true;
    21. }
    22. }
    23. }


    Meine Methode für den GET Request:


    C#-Quellcode

    1. [AddHeader(ContentType = MimeTypes.Json)]
    2. public async Task<object> Get(GetObjects request)
    3. {
    4. var collection = Connect._database.GetCollection<BsonDocument>("Cylinders");
    5. var aggregate = collection.Find(_ => true);
    6. var results = await aggregate.ToListAsync();
    7. return results.ToJson();
    8. }


    Ich erhalte auch JSON Objekte zurück und der Content-Type des Response Headers ist auch Json.

    Problem:Diese JSON Objekte sind aber nicht korrekt escaped und werden total seltsam dargestellt (Backslahes etc), da scheint
    also etwas mit dem Konvertieren von BSON in JSON nicht so ganz zu laufen.


    Anderes Problem 2 (Aggregation):

    C#-Quellcode

    1. var collection = Connect._database.GetCollection<BsonDocument>("Cylinders");
    2. var aggregate = collection.Aggregate().Group(new BsonDocument {
    3. { "_id", "$_id" },
    4. });
    5. var results = await aggregate.ToListAsync();

    Das funktioniert gut, ich möchte aber noch weitere Elemente einfügen, z.B. so:

    C#-Quellcode

    1. var aggregate = collection.Aggregate().Group(new BsonDocument {
    2. { "_id", "$_id" },
    3. { "AvailableAt", "$description.availableat" }
    4. });​

    C#-Quellcode



    Erhalte ich als Antwort:

    Quellcode

    1. "ResponseStatus":{"ErrorCode":"MongoCommandException","Message":"Command aggregate failed: the group aggregate field 'AvailableAt' must be defined as an expression inside an object.



    Kann mir da jemand bei den Problemen weiterhelfen? Falls weitere Infos benötigt werden, tut es mir leid, ich werde dann Infos ergänzen.
    Bilder
    • Screen01.PNG

      41,8 kB, 1.276×573, 346 mal angesehen