我正在使用Dapper从SQL Server读取数据。我有一条返回长Json结果的SQL语句,但问题是该结果被分成3行,每行最多2033个字符,因此Dapper无法解析返回的结果,因为它是无效的Json。
如何防止这种分裂或如何使Dapper处理呢?
这是我的代码:
SqlMapper.ResetTypeHandlers();
SqlMapper.AddTypeHandler(new JsonTypeHandler<List<Product>>());
const string sql = @"SELECT
*,
(SELECT * FROM Balance b
WHERE p.SKU = b.SKU
FOR JSON PATH) AS [Balances]
FROM Product p
WHERE SKU IN @SKUs
FOR JSON PATH";
var connection = new SqlConnection("myconnection");
return connection.QuerySingleAsync<List<Product>>(sql, new{SKUs = new[] {"foo", "bar"}} });
Run Code Online (Sandbox Code Playgroud)
和TypeHandler的代码:
public class JsonTypeHandler<T> : SqlMapper.TypeHandler<T>
{
public override T Parse(object value)
{
return JsonConvert.DeserializeObject<T>(value.ToString());
}
public override void SetValue(IDbDataParameter parameter, T value)
{
parameter.Value = JsonConvert.SerializeObject(value);
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我如何在DataGrip中运行此SQL …
我有数千个文档的集合,在文档中有一个名为Rate的字段,问题是当前它的类型是字符串,所以当它不可用时,老开发人员将其设置为“N/A”。现在我想在 C# 中将此字段的类型更改为数字(当 n/a 时将其设置为 0),但如果这样做,我将无法加载过去的数据。我们可以自定义反序列化以便将 N/A 转换为 0 吗?
假设我有 2 个这样的端点
在情况 1 中,我将上面的数组传递给RouteClaimsRequirement,如下所示
"RouteClaimsRequirement": {
"order_perm": ["order_create", "order_edit"]
}
Run Code Online (Sandbox Code Playgroud)
但当应用程序启动时它会崩溃,并且在情况 2 中。我这样设置
"RouteClaimsRequirement": {
"order_perm": ""
}
Run Code Online (Sandbox Code Playgroud)
但用户声称“order_perm”:“create_order”授权失败。
RouteClaimsRequirement是否支持这些用例?如果是这样我该怎么做?