将 ServiceStack 客户端与区分大小写的 REST 服务一起使用
Using ServiceStack Client with Case Sensitive REST Service
我的代码在响应 DTO 中使用 DataContract
和 DataMember
并且
我正在尝试通过此响应使用 REST 服务,但它不起作用:
{
"results": {
"p": 277.76,
"s": 1,
"x": 11,
"P": 34.95,
"S": 3,
"X": 51,
"z": 3,
"T": "ABCD",
"t": 1625874938819163000,
"y": 1625874938819148500,
"q": 55320377
},
"status": "OK",
"request_id": "e16e9db61563c8f675d5400f6c9fd8c9"
}
如您所见,名称区分大小写,我很确定这就是原因。我发现 this article from 9+ years ago 指出:
As for ServiceStack's JSON Serializer, in the latest release - the properties are case-insensitive...
所以如果不是很明显的问题,有没有办法处理区分大小写的名称。希望它只是一个我需要设置的配置选项或一些简单的东西。
您可以将 JSON 映射设置为不区分大小写,这样无论大小写都可以映射
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var weatherForecast = JsonSerializer.Deserialize<WeatherForecast>(jsonString, options);
https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-character-casing
ServiceStack.Text Json Serailizer 属性不区分大小写,因此您需要使用字典来捕获具有不同名称的属性,例如:
class ApiResponse
{
public Dictionary<string,string> Results { get; set; }
}
或者,您可以使用 HTTP Utils to consume the 3rd Party API then parse the adhoc JSON with JS Utils 将其反序列化为适当的集合类型,并保留返回的类型,例如:
string json = url.GetJsonFromUrl();
var obj = (Dictionary<string,object>)JSON.parse(json);
obj["T"] //= "ABCD"
obj["t"] //= 1625874938819163000
我的代码在响应 DTO 中使用 DataContract
和 DataMember
并且
我正在尝试通过此响应使用 REST 服务,但它不起作用:
{
"results": {
"p": 277.76,
"s": 1,
"x": 11,
"P": 34.95,
"S": 3,
"X": 51,
"z": 3,
"T": "ABCD",
"t": 1625874938819163000,
"y": 1625874938819148500,
"q": 55320377
},
"status": "OK",
"request_id": "e16e9db61563c8f675d5400f6c9fd8c9"
}
如您所见,名称区分大小写,我很确定这就是原因。我发现 this article from 9+ years ago 指出:
As for ServiceStack's JSON Serializer, in the latest release - the properties are case-insensitive...
所以如果不是很明显的问题,有没有办法处理区分大小写的名称。希望它只是一个我需要设置的配置选项或一些简单的东西。
您可以将 JSON 映射设置为不区分大小写,这样无论大小写都可以映射
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
var weatherForecast = JsonSerializer.Deserialize<WeatherForecast>(jsonString, options);
https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-character-casing
ServiceStack.Text Json Serailizer 属性不区分大小写,因此您需要使用字典来捕获具有不同名称的属性,例如:
class ApiResponse
{
public Dictionary<string,string> Results { get; set; }
}
或者,您可以使用 HTTP Utils to consume the 3rd Party API then parse the adhoc JSON with JS Utils 将其反序列化为适当的集合类型,并保留返回的类型,例如:
string json = url.GetJsonFromUrl();
var obj = (Dictionary<string,object>)JSON.parse(json);
obj["T"] //= "ABCD"
obj["t"] //= 1625874938819163000