我使用下面的代碼序列化對象:數據庫存儲BOM編碼
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...
我該如何擺脫?當我嘗試使用,以取消序列如下:
public static DelayMessage Deserialise(IMessageSerializer messageSerializer, string data)
{
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(data)))
{
return (DelayMessage)messageSerializer.Deserialize(stream)[0];
}
}
我得到以下異常:在第1行位置1
「錯誤的命名空間 ‘http://schemas.microsoft.com/2003/10/Serialization/’期待 元素‘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();
}
}
好了,所以我應該改變數據庫中什麼配置? – 2009-08-25 14:40:30
哦,很好的答案,順便說一句。我曾以爲我有點生氣,只是修剪問號和事物而不滿意。 – 2009-08-25 14:41:02
不知道......數據庫服務器是什麼?你怎麼連接到它?模式中有什麼? – bobince 2009-08-25 14:52:45