Wie, um wieder eine einzelne DataRow-Objekt von Asp Web API?

Also Schreibe ich einige Asp.Net WebApi-code, um den Haken mit alten C# – back-end-code, wo es keine model-Klasse verwendet. (Reine dataTable zurückgegeben von der DataAccess, Verrückt, Recht? Ich weiß)

Folgende code ist der code ich habe auf der Server-Seite.

 public IHttpActionResult GetProduct(int campaignID, int productID)
    {
        var so = new SearchOptions(campaignID)
        {
            ProductID = productID
        };

        var result = SearchManager.Search(so);
        if (result == null || result.Rows.Count == 0)
            return NotFound();
        return Ok(result.Rows[0]);

    }

Warte ich auf die Antwort, wie diese:

{
Field1: "field1",
Field2: "field2",
...
}

Aber Eigentlich bin ich mit dieser:

{
  "rowError": "",
  "rowState": 2,
  "table": [
    {
      Field1 : "field1",
      Field2 : "field2",
      ...
    }
  ],
  "itemArray": ["field1","field2"],
  "hasErrors": false
}

Ich will nicht alle diese rowError, rowState…etc

Wenn ich Tue dies auf der server-Seite:

public IHttpActionResult GetProduct(int campaignID, int productID)
        {
            var so = new SearchOptions(campaignID)
            {
                ProductID = productID
            };

            var result = SearchManager.Search(so);
            if (result == null || result.Rows.Count == 0)
                return NotFound();
            return Ok(result);

        }

Ich erhalte dies:

[{Field1: "field1", Field2: "field2"..}]

was leider abgelehnt ngResource get-Methode, da es ein array, anstatt ein einzelnes Json-Objekt.

Was soll ich tun? Wenn ich nur zurückgeben möchten eine einzelne dataRow als Json-string.

Idealerweise möchte ich vermeiden, gehen Sie nach unten, um den Pfad zu erstellen wird ein Response-Objekt, wie vorgeschlagen, durch Manoz. (Danke für deine Antwort Manoz obwohl)

Dank

InformationsquelleAutor TypingPanda | 2016-09-01



3 Replies
  1. 2

    Können Sie konvertieren Sie Ihre DataRow zu Dictionary mit LINQ:

    public IHttpActionResult GetProduct(int campaignID, int productID)
    {
        var so = new SearchOptions(campaignID)
        {
            ProductID = productID
        };
    
        var result = SearchManager.Search(so);
        if (result == null || result.Rows.Count == 0)
            return NotFound();
    
        var row = result.Rows[0];
        return Ok(row.Table.Columns
            .Cast<DataColumn>()
            .ToDictionary(c => c.ColumnName, c => row[c]));
    }

    Diese Aktion gibt JSON, wie du willst: { Field1: "field1", Field2: "field2", ... }

    • Funktioniert wie ein Charme. Danke!
  2. 1

    Haben Sie versucht, zu Deserialisieren es?

    Using NewtonSoft.Json

    Erstellen Sie eine separate Klasse mit Ihrer Antwort. Ich glaube, dass Antwort-format wird gleich bleiben immer.

    public class Response{
        public List<response> table{ get;set; }
    }
    
    public class response {
        public string Field1 { get;set; }
        public string Field2 { get;set; }
    }

    Nun Deserialisieren Antwort mit Newtonsoft.Json

    var entities = SearchManager.Search(so);
    
    var result= JsonConvert.DeserializeObject<Response>(entities)
    var endResult= result.table[0] //will get you result

    Helfen Quelle – https://www.nuget.org/packages/newtonsoft.json/

    • Danke. Aber sorry, ich werde zu aktualisieren meinem OP. Weil ich versuche zu vermeiden, die Schaffung eines Modells für die Antwort.
    • dann warum kann man nicht einfach Abfragen – result.Rows[0].table[0] ?
    • Es gibt mir ein array wieder. Gleiche wie Ok(result)
    • kann nicht gleich sein. Sie Lügen ;D
    • sowieso nur versucht, das hier – jsonpath.com mit Abfrage equalant zu result.Rows[0].table[0] ==> $.table[0] sehen, was Sie bekommen.
  3. 0

    Da gepostet nur vor ein paar Monaten, vorausgesetzt, dass Sie mit API-2.x. Diese version verarbeitet return-format automatisch und intelligent, vor allem keine Notwendigkeit zur Umsetzung expliziten CAST. Sie müssen nur geben Sie den Typ Sie möchten. Zum Beispiel in AngularJS, dies wird Ihnen sagen, API-was Sie erwartet:

    $http({
      method: 'GET',
      responseType: 'json'
      url: ...
    }).then(function mySuccess(response){
      $scope.theRow = response.data;
    })

    Bei server API, nur halten Sie Ihren code. Während der Ausführung wird die auto-return-Ergebnis im JSON-format.

    • Wieder, keine Notwendigkeit, DARSTELLER überhaupt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.