Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据库存储的BOM编码_C#_.net_Serialization_Datacontractserializer - Fatal编程技术网

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)。