2017-12-04 6 views
0

Ich möchte Beitrag Antrag mit C# WebClient mit diesem Json Schema senden:Beitrag mit C# WebClient Mehrere Json Objekt

[ 
    { 
    "id": "00000000-0000-0000-0000-000000000000", 
    "points": [ 
     { 
     "timestamp": "2017-12-04T16:07:44.562Z", 
     "value": 0 
     } 
    ] 
    } 
] 

Ich habe versucht diese:

public class RequestData 
{ 
    public string id {get; set; } 
    public points points { get; set; } 
} 

public class points 
{ 
    public DateTime timestamp { get; set; } 
    public float value { get; set; } 
} 

Mein Programm:

Random number = new Random(); 
var req = new RequestData(); 
req.id = "0e13d9c-571c-44f4-b796-7c40c0e20a1d"; 
req.points = new points { timestamp = DateTime.UtcNow, value = 
number.Next(100, 99999) }; 

JsonSerializerSettings settings = new JsonSerializerSettings(); 
var data = JsonConvert.SerializeObject(req); 

WebClient client = new WebClient(); 

client.Headers.Add(HttpRequestHeader.Authorization, 
AquaAtuhorization.accessToken); 

client.Headers.Add(HttpRequestHeader.ContentType, "application/json"); 
client.UploadString ("http://localhost:8080/api/v1/data/writeNumericValues", 
data ); 

Und ich bekomme immer Http 415 (nicht unterstützte Medientyp).

Wie konnte ich mein C# -Objekt formatieren, da das restApi Format akzeptiert.

Antwort

1

Blick auf die JSON, die eckigen Klammern [ ] bezeichnen, dass etwas ein Array ist. In diesem Fall beide RequestData und points haben eine Reihe sein, unter dem Beispiel sehen:

public class RequestData 
{ 
    public string id { get; set; } 
    public List<points> points { get; set; } // I use list, could be an array 
} 

public class points 
{ 
    public DateTime timestamp { get; set; } 
    public float value { get; set; } 
} 

Dann erstellen Sie Ihre req Objekt wie folgt:

var req = new List<RequestData> // Again I use list, could be an array 
{ 
    new RequestData 
    { 
     id = "0e740d9c-571c-44f4-b796-7c40c0e20a1d", 
     points = new List<points> // Defined as a list, even though it has one entry 
     { 
      new points 
      { 
       timestamp = DateTime.UtcNow, 
       value = number.Next(100, 99999) 
      } 
     } 
    } 
}; 

Dann serialisiert es nur normal, wird das Ergebnis die folgenden sein:

[ 
    { 
    "id":"0e740d9c-571c-44f4-b796-7c40c0e20a1d", 
    "points":[ 
     { 
     "timestamp":"2017-12-04T17:12:25.8957648Z", 
     "value":59522.0 
     } 
    ] 
    } 
] 
+0

Danke Sir. es hat funktioniert :) – HellYeah

+0

Irgendwelche Gründe, dies als die richtige Antwort aufzuheben? – Equalsk

+0

Falsche Manipulation: O – HellYeah

0

Ihre Json Klasse muss so sein, siehe http://json2csharp.com/ oder verwenden Paste als JSON aus VS https://blog.codeinside.eu/2014/09/08/Visual-Studio-2013-Paste-Special-JSON-And-Xml/

public class Point 
{ 
    public DateTime timestamp { get; set; } 
    public int value { get; set; } 
} 

public class RootObject 
{ 
    public string id { get; set; } 
    public List<Point> points { get; set; } 
}` 
+0

Sie Saj Danke, aber ich bekomme immer noch die gleiche Http 415 Fehler – HellYeah

+0

Verwendung Fiedler und prüfen, ob es einen Inhaltstyp hea Einstellung der, überprüfe auch ob deine API eine Zeichenkette benötigt – saj