我实现了一个包含一些文本的搜索树。现在,我想允许客户端将此树保存到磁盘 - serilize。所以,我正在使用JSON.Net将此对象邮件化为磁盘。由于我手持大文本文件(50MB +),我将这个对象直接串行化为DISK(而不是获取包含此JSON的字符串)。
这是我目前的代码:
public void Save(string path)
{
using (FileStream fs = File.Open(path, FileMode.OpenOrCreate))
using (StreamWriter sw = new StreamWriter(fs))
using (JsonWriter jw = new JsonTextWriter(sw))
{
jw.Formatting = Formatting.Indented;
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(jw, this);
}
}
这是我的例外:
exception:
System.Text.EncoderFallbackException: Unable to translate Unicode character \uD859 at index 485 to specified code page.
Result StackTrace:
at System.Text.EncoderExceptionFallbackBuffer.Fallback(Char charUnknown, Int32 index)
at System.Text.EncoderFallbackBuffer.InternalFallback(Char ch, Char*& chars)
at System.Text.UTF8Encoding.GetBytes(Char* chars, Int32 charCount, Byte* bytes, Int32 byteCount, EncoderNLS baseEncoder)
at System.Text.EncoderNLS.GetBytes(Char* chars, Int32 charCount, Byte* bytes, Int32 byteCount, Boolean flush)
at System.Text.EncoderNLS.GetBytes(Char[] chars, Int32 charIndex, Int32 charCount, Byte[] bytes, Int32 byteIndex, Boolean flush)
at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder)
at System.IO.StreamWriter.Dispose(Boolean disposing)
at System.IO.TextWriter.Dispose()
...
未通过测试的文件是包含通道字符的文件(不确定这是否存在问题)。
我怎么能解决这个问题?
答案 0 :(得分:1)
它不是JSON问题,它是一个StreamWriter问题,遇到了无法编码的字符。试着像这样打开它:
using (StreamWriter sw = new StreamWriter(fs, Encoding.Unicode))