这只是一个创建与要输出的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的例子! –