Während DiN_ Antwort die Frage beantwortet, glaube ich nicht, dass es eine gute Lösung ist. Nach einem Blick auf die Marine Traffic API fühlt es sich an, als hätten sie eine schlechte JSON-Implementierung vorgenommen, da die XML-Darstellung eindeutig Attributnamen für die Werte aufweist. Ihre JSON sollte haben gewesen:
{"positions": ["position": {"mmsi": "311029000", "lat": "37.48617", "long": "24.37233", ...}]}
Weil es nicht der Fall ist, haben wir einen JSON-String statt, wo es eine verschachtelte Array, wobei das Array ein zweidimensionales Feld, und man müsste die Hoffnung Das Datenmodell wird nicht geändert, um etwas zu entfernen, da Sie zum Abrufen von Daten einen Index verwenden müssen.
Wenn Sie jedoch die von der API verfügbare XML betrachten, haben die Attribute Namen. Ich würde vorschlagen, dass Sie stattdessen das XML herunterladen und dieses in ein Objekt - ein Modell in ASP.NET - einbetten, das stark typisiert ist und einfacher in einer Ansicht verwendet werden kann.
Hier ist ein Beispiel, das ich ausgeführt habe. Es verwendet XML-Parsing, um zuerst das XML von der API zu lesen und es dann zu JSON und schließlich zu einem tatsächlichen Objekt zu analysieren.
Zuerst wird die Modellklasse (Position.cs)
public sealed class Position
{
[JsonProperty("@MMSI")]
public string MMSI { get; set; }
[JsonProperty("@LAT")]
public string Latitude { get; set; }
[JsonProperty("@LON")]
public string Longitude { get; set; }
[JsonProperty("@SPEED")]
public string Speed { get; set; }
[JsonProperty("@HEADING")]
public string Heading { get; set; }
[JsonProperty("@COURSE")]
public string Course { get; set; }
[JsonProperty("@STATUS")]
public string Status { get; set; }
[JsonProperty("@TIMESTAMP")]
public string TimeStamp { get; set; }
}
Als nächstes werden die Parsing-Logik:
var client = new WebClient();
var xml = client.DownloadString("data.xml");
var doc = new XmlDocument();
doc.LoadXml(xml);
var json = JsonConvert.SerializeXmlNode(doc);
var positions = JObject.Parse(json).SelectToken("pos").SelectToken("row").ToObject<List<Position>>();
Am Ende der Parsing-Logik, haben Sie jetzt eine Liste von Positionen, die Sie zu Ihrer Ansicht weitergeben können, und müssen stark typisiert sein.
Als kurzes Beispiel:
// after you have the positions list
return View(positions);
Positions.cshtml
@model List<Positions>
<h2>Positions</h2>
@foreach (var position in Model)
{
<p>@position.MMSI (@position.Latitude, @position.Longitude)</p>
}
Ich hoffe, dies ist nützlich für Sie. Wenn Sie Fragen haben, schreiben Sie mir einen Kommentar.
Ist der von Ihnen gepostete JSON korrekt? Es zeigt ein zweidimensionales Array ([] []), aber der Inhalt des verschachtelten Arrays sieht aus, als sollte es stattdessen ein Objekt sein - normalerweise wird es stattdessen von {} notiert. – mtaanquist
@MadsTaanquist Die Json kommt aus: http://www.marinetraffic.com/nl/ais-api-services/documentation/api-service:27 –