有一个问题,我的对象正在使用 Newton 进行序列化,其中一个属性是一个字符串,其中包含诸如1/2"、1/4"等分数的值...
序列化后,我将变量传递给使用OPENJSON的 SQL Server 存储过程。
小数值中的双引号似乎没有正确转义,因为它作为 JSON 的无效格式失败。调试时,我在下面看到小数值中的 " 没有被正确转义。
一些序列化有点新,所以可以使用一点帮助。
string strJson = JsonConvert.SerializeObject(myobject);
DECLARE @json nvarchar(max) = '{"Number":64260,"Notes":"1/2\\" testing"}';
SELECT *
FROM OPENJSON (@json, '$')
WITH(
[Number] int '$.Number'
,[Notes] nvarchar(max) '$.Notes'
) AS myDat
Msg 13609, Level 16, State 4, Line 2 JSON text is not properly formatted. Unexpected character 't' is found at position 32.
如果我从分数值中删除第二个“\”,它就可以正常工作。
public partial class TblEcr
{
public int Number { get; set; }
public string Notes { get; set; }
}
public JsonResult OnPostUpdate([DataSourceRequest] DataSourceRequest request, TblEcr ecr)
{
_context.TblEcr.Where(x => x.Number == ecr.Number).Select(x => ecr);
try
{
if (ModelState.IsValid)
{
string ecrJson = JsonConvert.SerializeObject(ecr);
var param = new SqlParameter[] {
new SqlParameter() {
ParameterName = "@json",
SqlDbType = System.Data.SqlDbType.VarChar,
Size = 8000,
Direction = System.Data.ParameterDirection.Input,
Value = ecrJson
},
new SqlParameter() {
ParameterName = "@Status",
SqlDbType = System.Data.SqlDbType.Bit,
Direction = System.Data.ParameterDirection.Output
//,Value = 10
},
new SqlParameter() {
ParameterName = "@ErrorDetails",
SqlDbType = System.Data.SqlDbType.VarChar,
Size =8000,
Direction = System.Data.ParameterDirection.Output,
}};
int affectedRows = _context.Database.ExecuteSqlCommand("dbo.usp_UpdateECR @json, @Status, @ErrorDetails out", param);
}
}
catch (Exception ex)
{
return new JsonResult(ex.Message);
}
return new JsonResult(new[] { ecr }.ToDataSourceResult(request, ModelState));
}