如何构建一个好的c#数据结构

时间:2017-01-14 11:47:11

标签: c# json rest restsharp

我的目标是在业余时间基于goeuro.comoverview)开发自定义搜索。

我将搜索参数简化为最低限度。

例如(你可以试试这个,因为search_id有效):

http://www.goeuro.com/GoEuroAPI/rest/api/v5/results?&search_id=428558909

当您访问http://www.goeuro.com并首次输入搜索参数时,系统会生成search_id

这是我从http://json2csharp.com/生成的简化数据结构,使用它作为我的输入JSON:

{
  "serviceVersion": "v1.0.0",
  "sortVariants": null,
  "companies": {
    "1007": {
      "name": "Eurolines Germany",
      "logoUrl": "http://cdn-goeuro.com/static_content/web/logos/{size}/eurolines_germany.png",
      "id": "1007"
    }
  },
  "outbounds": {
    "3624107261930718525-38-flight-1-27": {
      "companyId": "38",
      "mode": "flight",
      "duration": "873",
      "outboundId": "3624107261930718525",
      "journeyId": "27",
      "departureTime": "2017-01-15T19:12:00.000+01:00",
      "arrivalTime": "2017-01-16T09:45:00.000+01:00",
      "stops": "1",
      "price": 16209,
      "updatedAt": "1",
      "segments": [ 1344486303, 574447503, 689435565, 833161604 ],
      "arrivalOvernightOffset": 1,
      "overnightOffset": 1
    }
  },
  "query": {
    "roundTrip": false,
    "airportToAirport": false,
    "locationsOutsideEurope": false,
    "searchId": "428558909",
    "departurePosition": "377001",
    "arrivalPosition": "398532",
    "departureDate": "2017-01-15T00:00:00.000+01:00",
    "passengers": {
      "adults": 1,
      "children": 0,
      "infants": 0
    },
    "userInfo": {
      "userLocale": "en",
      "userCurrency": "EUR"
    },
    "searchModes": {
      "bus": {
        "status": "done",
        "resultsQty": 13,
        "filteredResultsQty": 13
      },
      "flight": {
        "status": "done",
        "resultsQty": 276,
        "filteredResultsQty": 276
      },
      "train": {
        "status": "done",
        "resultsQty": 4,
        "filteredResultsQty": 4
      }
    }
  },
  "itineraries": [
    { "outboundLegId": "3624107261930718525-38-flight-1-27" }
  ],
  "segmentDetails": {
    "1002857016": {
      "type": "flight",
      "departureTime": "2017-01-16T08:35:00.000+01:00",
      "arrivalTime": "2017-01-16T12:05:00.000+02:00",
      "departurePosition": "313870",
      "arrivalPosition": "314920",
      "duration": "150",
      "company": "190",
      "transportId": "ca6199",
      "direction": "OUTBOUND",
      "overnightOffset": 1,
      "departureOvernightOffset": 1,
      "arrivalOvernightOffset": 1
    }
  },
  "positions": {
    "2091737": {
      "positionType": "busstation",
      "name": "Warszawa, Warszawa Centralny",
      "cityName": "Warsaw",
      "latitude": 52.22782,
      "longitude": 21.00224
    }
  },
  "currencies": {
    "EUR": {
      "name": "Euro",
      "symbol": "€"
    }
  }
}

http://json2csharp.com/的结果相当不错,但另一方面却产生了类似的结果

public class Outbounds
    {
        public __invalid_type__362410726193071852538Flight127   __invalid_name__3624107261930718525-38-flight-1-27 { get; set; }
    }

我在这里看到两个问题:

  1. 使用__invalid_name__3624107261930718525-38-flight-1-27不是c#
  2. 中的有效标识符
  3. ,上面提到的名字是一些随机名称,我不能依赖我的数据结构。
  4. 所以,我的实际问题是: 我该如何处理请求?  数据结构应该如何?

    顺便说一下,这是我正在使用的代码(加上http://json2csharp.com/生成的结果):

    static void Main()
        {
            var client = new RestClient("https://www.goeuro.com");
            var request = new RestRequest("/GoEuroAPI/rest/api/v5/results?&search_id=428558909", Method.GET);
            request.RequestFormat = DataFormat.Json;
            // contentType: "application/json; charset=utf-8",
            var response = client.Execute<Response>(request).Data;
    
        }
    

    实际上我找到了一个现有的解决方案(部分)来解决我的问题: https://github.com/evgenTraytyak/goeuro-api ,实际上是用node.js编写的,但是我需要c#,但顺便说一下这个例子不太合适(只有你有一个现有的search_id),最后我想得到{{1来自goeuro,无需手动输入我的代码。 也许使用它的原因是JSON格式改变了......

0 个答案:

没有答案