gpt4 book ai didi

c# - 如何序列化 List 同时转义特殊字符?
转载 作者:行者123 更新时间:2023-11-30 15:13:39 27 4
gpt4 key购买 nike

<分区>

我们有一个非常大的List<object>我们正在将其转换为 json 字符串,然后发送到存储过程。为了让这篇文章简单明了,假设对象看起来像这样:

public class Customer
{
public string Name { get; set; }
}

其中一位客户是“Bob's Repair Shop”。当其中包含此值的列表被序列化时,它将包含以下内容:

{
"Name": "Bob's Repair Shop"
}

没关系,直到我们要将此 json 发送到存储过程为止。当它到达那里时,单引号会引发错误(我理解)。

最初我们通过执行 .replace("'", "~") 来处理这个问题在 C# 代码中的 json 字符串上,然后在存储过程中执行相反的操作。这工作了一段时间。但是我们现在遇到的是我们拥有 List<> 的对象比这个小例子复杂得多,而且我们还要处理列表中的数十万条记录。当 json 字符串这么大时,.replace("'", "~")抛出 Out of Range异常(exception)。老实说,这 .replace("'", "~")无论如何,这种方法都是一种技巧。

我希望找到一种方法来序列化我们的 List<object>以在序列化过程中转义单引号的方式。这可能吗?如果是这样,怎么做到的?

编辑:

我本来就应该这么说的。对不起,我错过了。以下是存储过程如何接收 json 字符串:

ALTER PROCEDURE [dbo].[name_of_proc]
@jsonString NVARCHAR(MAX)
AS

然后我们转换 @jsonString到表变量 OPENJSON

编辑 2:

如何调用 sp:

    public void UpdateBulk(List<object> myObject)
{
string json = Newtonsoft.Json.JsonConvert.SerializeObject(myObject);
json.replace("'", "~");
var dParam = new DynamicParameters();
dParam.Add("@jsonString", json);
QuerySP<myObject>("name_of_proc", dParam);
}

protected IEnumerable<T> QuerySP<T>(string storedProcedure, object param = null)
{
using (var db = this.Context)
{
var output = db.Query<T>(storedProcedure, param: param, commandType: CommandType.StoredProcedure,commandTimeout: 32767);
return output;
}
}

编辑 3:指向可能重复的线程询问如何更改它:

{"key" : "value"}

为此:

{'key' : 'value'}

这不是我要问的。我在问如何改变这个:

{
"Name": "Bob's Repair Shop"
}

对此:

{
"Name": "Bob\'s Repair Shop"
}

27 4 0