這只是一個創建與要輸出的JSON形狀匹配的DTO和您想要接收的JSON的練習。要發出確切的JSON屬性名稱,您可以在請求DTO上使用[DataMember]
,或者在JsConfig.EmitCamelCaseNames = true
上使用[DataMember]
告訴ServiceStack在camelCase中序列化屬性,或者您可以使用JsConfig.With() to create a Custom Scope。
我創建了一個Live example of this in Gistlyn,您可以使用它來對彭博的API進行實驗。
我在這裏使用了[DataMember]
屬性,因爲它可以獨立於Json序列化配置工作。您不需要爲Response DTO執行此操作,因爲ServiceStack序列化器不區分大小寫。
因此,要發送的是JSON的形狀,你可以使用相匹配的請求:
[DataContract]
public class Mapping
{
[DataMember(Name="idType")]
public string IdType { get; set; }
[DataMember(Name="idValue")]
public string IdValue { get; set; }
[DataMember(Name="exchCode")]
public string ExchCode { get; set; }
[DataMember(Name="currency")]
public string Currency { get; set; }
[DataMember(Name="micCode")]
public string MicCode { get; set; }
}
您可以使用ServiceStack的HTTP Utils輕鬆地將請求發送到第三方的API,如:
var url = "https://api.openfigi.com/v1/mapping";
var json = url.PostJsonToUrl(new[]{
new Mapping { IdType = "ID_ISIN", IdValue = "US4592001014" },
new Mapping { IdType = "ID_WERTPAPIER", IdValue = "851399", ExchCode = "US" },
new Mapping { IdType = "ID_BB_UNIQUE", IdValue = "EQ0010080100001000", Currency = "USD" },
new Mapping { IdType = "ID_SEDOL", IdValue = "2005973", MicCode = "EDGX", Currency = "USD" },
});
然後收到您需要創建與JSON響應形狀相匹配的DTO的響應,如下所示:
public class BloombertResult
{
public string Figi { get; set; }
public string SecurityType { get; set; }
public string MarketSector { get; set; }
public string Ticker { get; set; }
public string Name { get; set; }
public string UniqueId { get; set; }
public string ExchCode { get; set; }
public string ShareClassFIGI { get; set; }
public string CompositeFIGI { get; set; }
public string SecurityType2 { get; set; }
public string SecurityDescription { get; set; }
public string UniqueIdFutOpt { get; set; }
}
public class BloombergResponse
{
public List<BloombertResult> Data { get; set; }
public string Error { get; set; }
}
,你可以只反序列化爲BloombergResponse的集合,e.g:
var response = json.FromJson<BloombergResponse[]>();
Gistlyn會告訴你通過點擊它在監視窗口中每個變量的一個很好的人類可讀的預覽。或者如果你是C#單元測試的話,你可以很快看到填充的DTO:
response.PrintDump();
愛生活gistlyn的例子! –