Json.Net序列化异常:生成奇怪字符而非括号的问题咨询
解决Json.Net序列化出现奇怪字符的问题
嘿,我一眼就瞅出问题所在了!你用了BsonWriter来序列化对象,但却把文件后缀写成了.xml,而且Bson本身是二进制格式,不是可读的文本JSON,所以直接打开文件看到的肯定是一堆奇怪字符,而不是预期的JSON括号~
先拆解下你的代码里的核心问题:
- 你实例化的是
BsonWriter,它会把对象序列化成二进制的Bson数据,根本不是文本格式的JSON - 你把输出文件命名为
test.xml,但这个文件既不是XML也不是JSON,而是纯二进制的Bson数据
解决方案分两种情况:
情况1:你想要生成可读的JSON文本文件
把BsonWriter换成JsonTextWriter,同时建议把文件后缀改成.json,修改后的代码如下(用using语句自动释放资源,比手动Close更安全):
var info = new Info("Peter", 25); var filePath = Path.Combine(Application.dataPath, "test.json"); using (var stream = new FileStream(filePath, FileMode.Create)) // 用Create避免文件不存在报错 using (var writer = new JsonTextWriter(new StreamWriter(stream))) { var serializer = new JsonSerializer(); serializer.Serialize(writer, info); }
情况2:你确实需要生成Bson格式的二进制文件
那得把文件后缀改成.bson,而且读取的时候要用BsonReader来解析,代码调整如下:
var info = new Info("Peter", 25); var filePath = Path.Combine(Application.dataPath, "test.bson"); using (var stream = new FileStream(filePath, FileMode.Create)) using (var writer = new BsonWriter(stream)) { var serializer = new JsonSerializer(); serializer.Serialize(writer, info); }
注意:Bson是二进制格式,直接用文本编辑器打开会显示乱码,这是正常现象,你需要用Bson解析工具或者对应代码读取才能看到实际内容。
另外补充下你的Info类应该是这样的(确保有公开属性和构造函数):
public class Info { public string Name { get; set; } public int Age { get; set; } public Info(string name, int age) { Name = name; Age = age; } }
内容的提问来源于stack exchange,提问作者Mycom
相关产品推荐
相关产品推荐

