gpt4 book ai didi

c# - 从 SQL Server Compact 反序列化会引发 "There is an unclosed literal string."错误

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:00 25 4
gpt4 key购买 nike

我正在尝试将一些对象存储在 SQL Server Compact 中(SQL CE) 数据库,方法是使用 SOAP 格式化程序将它们序列化。序列化似乎工作得很好,但是当我尝试反序列化对象时,出现错误提示

There is an unclosed literal string. Line 53, position 72.

此外,在尝试填充数据集时重新启动应用程序后,出现以下错误:

Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

我的所有列(ID 除外)都允许空值并且是非唯一的,所以我不知道这是从哪里来的。这是我的序列化程序的代码:

public static class Serializer
{
static public string Serialize(AssessmentReport theObject)
{
MemoryStream mStream = new MemoryStream();
SoapFormatter formatter = new SoapFormatter();
formatter.Serialize(mStream, theObject);
byte[] buffer = mStream.ToArray();
mStream.Close();
string value = Encoding.UTF8.GetString(buffer);
return value;
}

static public AssessmentReport Deserialize(string value)
{
byte[] buffer = Encoding.UTF8.GetBytes(value);
MemoryStream mStream = new MemoryStream(buffer);
SoapFormatter formatter = new SoapFormatter();
mStream.Position = 0;
AssessmentReport theReport = (AssessmentReport)formatter.Deserialize(mStream);
mStream.Close();
return theReport;
}
}

下面是我如何调用序列化程序(theReport 是要序列化的对象的一个​​实例):

examTableAdapter.UpdateAsmFile(Serializer.Serialize(theReport), examID);

下面是我调用反序列化方法的方式:

string value = Convert.ToString(examTableAdapter.GetAsmFile(2));
AsmReport theReport = Serializer.Deserialize(value)

保存字符串的 SQL Server Compact 数据库中的字段是 nvarchar 类型,限制为 3500。

我尝试使用二进制格式化程序,但在序列化时它似乎总是返回一个空的 byte[] 缓冲区。我确实需要深度序列化,这就是 XML 序列化程序毫无疑问的原因。

最佳答案

好的,所以这个我已经尝试了两个多月了。虽然我找不到问题的合理解决方案,但似乎将编码更改为 utf7 可以解决问题。我想不出为什么会出现这个问题,但这似乎是我的机器特有的(我终于有机会在另一台计算机上运行代码并且它与 utf8 完美配合)。

关于c# - 从 SQL Server Compact 反序列化会引发 "There is an unclosed literal string."错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4329573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com