如何构建良好的c#数据结构

如何构建良好的c#数据结构,c#,json,rest,restsharp,C#,Json,Rest,Restsharp,我的目标是在业余时间开发一个基于()的定制搜索 我将搜索参数简化到最小 例如(只要search\u id有效,您就可以尝试此操作): 当您首次访问并输入搜索参数时,将生成搜索id 这是我使用它作为输入JSON生成的简化数据结构: { "serviceVersion": "v1.0.0", "sortVariants": null, "companies": { "1007": { "name": "Eurolines Germany", "logoU

我的目标是在业余时间开发一个基于()的定制搜索

我将搜索参数简化到最小

例如(只要
search\u id
有效,您就可以尝试此操作):

当您首次访问并输入搜索参数时,将生成
搜索id

这是我使用它作为输入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": "€"
    }
  }
}
来自的结果非常好,但另一方面,它会产生类似这样的结果

public class Outbounds
    {
        public __invalid_type__362410726193071852538Flight127   __invalid_name__3624107261930718525-38-flight-1-27 { get; set; }
    }
我在这里看到两个问题:

  • 使用
    \u无效的\u名称\u\u 3624107261930718525-38-flight-1-27
    在c中不是有效的标识符#
  • 上面提到的名字是一些随机的名字,我不能依赖我的数据结构
  • 所以,我的问题是: 我如何处理该请求? 数据结构应该是什么样子?

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

    static void Main()
    {
    var client=新的RestClient(“https://www.goeuro.com");
    var request=new RestRequest(“/GoEuroAPI/rest/api/v5/results?&search_id=428558909”,Method.GET);
    request.RequestFormat=DataFormat.Json;
    //contentType:“应用程序/json;字符集=utf-8”,
    var response=client.Execute(request.Data);
    }
    
    事实上,我找到了解决我的问题的现有解决方案(部分): ,它实际上是在node.js中编写的,但我需要c#,但是顺便说一下,这个示例不太管用(仅当您有一个现有的
    search_id
    ),最后我想从goeuro获得
    search_id
    ,而不用手动将它键入我的代码。
    也许使用这个的原因是JSON格式改变了…

    mmh,这可能是什么…对于
    的“outbounds”
    使用
    字典
    ,沿着。对
    “细分详细信息”
    “头寸”
    “欧元”
    等执行类似操作。
    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;
    
        }