使用JsonConvert序列化对象插入NoSQL时遇'} expected'报错咨询
解决C#中声明对象时的
'} expected'错误 嘿,这个问题我太熟悉啦!你遇到的错误根源很简单——你把JavaScript里的对象/数组写法直接用到C#里了,这俩语言的对象声明语法完全不一样,编译器自然会懵圈报'} expected'啦。
为什么会报错?
你写的var sampleinfo = [{"Name": "name"}];是标准的JavaScript数组+对象语法,但C#里根本不认识这种写法。C#要求必须用自己的语法来创建对象,不能直接照搬JS的写法。
正确的两种写法(附序列化示例)
下面给你两种最常用的正确实现方式,按需选择:
1. 匿名对象(适合临时使用,无需复用对象结构的场景)
如果只是临时创建一个对象用来序列化,用匿名对象最方便,语法是new { 属性名 = 变量值 }:
// 单个对象 var sampleInfo = new { Id = yourIdVariable, // 替换成你的实际ID变量 Name = yourNameVariable, Notes = yourNotesVariable, Done = yourDoneVariable }; // 如果是对象数组(比如要插入多个文档到NoSQL) var sampleInfoList = new[] { new { Name = "name" }, new { Id = 1, Name = "Alice", Notes = "Test note", Done = true } };
2. 自定义实体类(适合需要复用对象结构、类型更明确的场景)
如果这个对象结构会多次使用,建议先定义一个实体类,再实例化:
// 先定义类(注意类型要和你的变量匹配,比如Id如果是字符串就改成string) public class SampleInfo { public int Id { get; set; } public string Name { get; set; } public string Notes { get; set; } public bool Done { get; set; } } // 实例化单个对象 var sampleInfo = new SampleInfo { Id = 1, Name = "Bob", Notes = "Sample notes", Done = false }; // 实例化对象列表 var sampleInfoList = new List<SampleInfo> { new SampleInfo { Name = "First item" }, new SampleInfo { Id = 2, Name = "Second item", Done = true } };
序列化JSON的正确方式
不管用哪种方式创建对象,后续的序列化步骤都是一样的,直接用JsonConvert.SerializeObject就行:
// 序列化单个对象 string json = JsonConvert.SerializeObject(sampleInfo); // 序列化对象列表 string jsonList = JsonConvert.SerializeObject(sampleInfoList);
核心总结
C#里创建对象必须用new关键字开头:
- 匿名对象用
new { ... } - 自定义类对象用
new 类名 { ... }
绝对不能直接用JS风格的[{...}]写法,这就是你报错的关键原因~
内容的提问来源于stack exchange,提问作者Arane
相关产品推荐
相关产品推荐

