C# 数据库存储的BOM编码
我正在使用以下代码序列化对象:C# 数据库存储的BOM编码,c#,.net,serialization,datacontractserializer,C#,.net,Serialization,Datacontractserializer,我正在使用以下代码序列化对象: public static string Serialise(IMessageSerializer messageSerializer, DelayMessage message) { using (var stream = new MemoryStream()) { messageSerializer.Serialize(new[] { message }, stream); return Encoding.UT
public static string Serialise(IMessageSerializer messageSerializer, DelayMessage message)
{
using (var stream = new MemoryStream())
{
messageSerializer.Serialize(new[] { message }, stream);
return Encoding.UTF8.GetString(stream.ToArray());
}
}
不幸的是,当我将其保存到数据库(使用LINQ to SQL),然后查询数据库时,字符串似乎以问号开头:
?<z:anyType xmlns...
我得到以下例外情况:
“第1行位置1出错。应为
命名空间中的元素“anyType”
''..
遇到名为“”的“文本”,
命名空间“”
messageSerializer
的实现使用DataContractSerializer
如下:
public void Serialize(IMessage[] messages, Stream stream)
{
var xws = new XmlWriterSettings { ConformanceLevel = ConformanceLevel.Fragment };
using (var xmlWriter = XmlWriter.Create(stream, xws))
{
var dcs = new DataContractSerializer(typeof(IMessage), knownTypes);
foreach (var message in messages)
{
dcs.WriteObject(xmlWriter, message);
}
}
}
public IMessage[] Deserialize(Stream stream)
{
var xrs = new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment };
using (var xmlReader = XmlReader.Create(stream, xrs))
{
var dcs = new DataContractSerializer(typeof(IMessage), knownTypes);
var messages = new List<IMessage>();
while (false == xmlReader.EOF)
{
var message = (IMessage)dcs.ReadObject(xmlReader);
messages.Add(message);
}
return messages.ToArray();
}
}
public void序列化(IMessage[]消息,流)
{
var xws=newxmlwritersettings{ConformanceLevel=ConformanceLevel.Fragment};
使用(var xmlWriter=xmlWriter.Create(stream,xws))
{
var dcs=新的DataContractSerializer(typeof(IMessage),knownTypes);
foreach(消息中的var消息)
{
dcs.WriteObject(xmlWriter,消息);
}
}
}
公共IMessage[]反序列化(流)
{
var xrs=newxmlreadersettings{ConformanceLevel=ConformanceLevel.Fragment};
使用(var xmlReader=xmlReader.Create(stream,xrs))
{
var dcs=新的DataContractSerializer(typeof(IMessage),knownTypes);
var messages=新列表();
while(false==xmlReader.EOF)
{
var message=(IMessage)dcs.ReadObject(xmlReader);
消息。添加(消息);
}
返回消息。ToArray();
}
}
不幸的是,当我将其保存到数据库(使用LINQ to SQL),然后查询数据库时,字符串似乎以问号开头:
?<z:anyType xmlns...
??
不幸的是,当我将其保存到数据库(使用LINQ to SQL),然后查询数据库时,字符串似乎以问号开头:
?<z:anyType xmlns...
?好的,那么我应该在数据库中更改什么配置?哦,回答得好,顺便说一句。我原以为我有点疯了,我不喜欢只修剪问号和其他东西。不知道。。。数据库服务器是什么?你是如何连接到它的?架构中有什么?SQL Server,与System.Data.SqlClient连接。我已经尝试了
Text
和varchar(max)
作为序列化数据的列数据类型。啊哈,我认为SQL Server通常的方法是使用NVARCHAR[max],这是本机Unicode(存储为UTF-16LE)。好的,那么我应该在数据库中更改什么配置?哦,回答得好,顺便说一句,我原以为我有点疯了,我不喜欢只修剪问号之类的东西。不知道。。。数据库服务器是什么?你是如何连接到它的?架构中有什么?SQL Server,与System.Data.SqlClient连接。我已经尝试了Text
和varchar(max)
作为序列化数据的列数据类型。啊哈,我认为SQL Server的常用方法是使用NVARCHAR[max],它是本机Unicode(存储为UTF-16LE)。