You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:56:25