, 나는 그것이 좋은 해결책이라고 생각하지 않습니다. Marine Traffic API를 살펴본 결과, XML 표현에는 값에 대한 속성 이름이 분명히 있기 때문에 JSON 구현이 좋지 않은 것으로 느껴집니다. 이 배열은 2 차원 배열 인 중첩 배열, 어디가 아니기 때문에
{"positions": ["position": {"mmsi": "311029000", "lat": "37.48617", "long": "24.37233", ...}]}
, 우리는 대신 JSON 문자열을 가지고, 당신은 희망해야 할 것 : 그들의 JSON이있었습니다한다 인덱스를 사용하여 데이터를 검색해야하므로 데이터 모델은 무언가를 제거하기 위해 변경되지 않습니다.
그러나 API에서 사용할 수있는 XML을 보면 속성의 이름이 있습니다. 대신 XML을 다운로드하고 ASP.NET에서 모델 인 객체로 파싱하는 것이 좋습니다.이 모델은 강력하게 형식화되어 있으며 View에서보다 쉽게 사용할 수 있습니다.
다음은 내가 실행중인 예입니다. XML 파싱을 사용하여 먼저 API에서 XML을 읽은 다음이를 JSON 및 마지막으로 실제 객체로 구문 분석합니다.
첫째, 모델 클래스 (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; }
}
다음, 구문 분석 로직 : 구문 분석 로직의 끝에서
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>>();
, 당신은 지금의 목록을 가지고 자신의 견해에 전달할 수있는 위치이며, 강하게 입력해야합니다. 간단한 예를 들어
:
// 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>
}
나는이가 도움이 되었기를 바랍니다. 질문이 있으시면 의견을 보내주십시오.
게시 한 JSON이 올바른가요? 그것은 2 차원 배열 ([] [])을 보여 주지만 중첩 된 배열의 내용은 대신 객체 인 것처럼 보입니다. 대신 대개 {}로 표시됩니다. – mtaanquist
@MadsTaanquist json의 출처 : http://www.marinetraffic.com/nl/ais-api-services/documentation/api-service:27 –