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

C#使用JsonConvert序列化时如何将object作为属性名使用

解决方法

方法1:使用@转义关键字(最简方案,适配匿名类场景)

C# 中如果需要将保留关键字用作变量、属性名等标识符,只需要在关键字前添加 @ 前缀即可,编译器会自动识别为普通标识符,且 Newtonsoft.Json 序列化时会自动忽略前缀,输出的 JSON 键名就是正常的 object。
修改后的代码如下:

var message = JsonConvert.SerializeObject(new { 
    sessionid = guid.ToString(), 
    personnelNumber = Environment.UserName, 
    name = user.DisplayName, 
    activity = Activity,
    @object = Object, // @前缀转义关键字
    time = DateTime.Now,
    timespan = TimeSpan
});

序列化后的结果中会自动生成键为"object"的字段,完全符合接口参数要求。


方法2:使用自定义实体类加JsonProperty特性

如果该请求结构需要在多处复用,可以自定义序列化实体类,避免频繁写转义符:
首先定义实体类:

public class ApiPostMessage
{
    public string sessionid { get; set; }
    public string personnelNumber { get; set; }
    public string name { get; set; }
    public string activity { get; set; }
    [JsonProperty("object")] // 显式指定序列化后的键名
    public string ObjectContent { get; set; } // 使用非关键字的属性名即可
    public DateTime time { get; set; }
    public TimeSpan timespan { get; set; }
}

序列化时使用该类实例即可:

var message = JsonConvert.SerializeObject(new ApiPostMessage
{
    sessionid = guid.ToString(),
    personnelNumber = Environment.UserName,
    name = user.DisplayName,
    activity = Activity,
    ObjectContent = Object,
    time = DateTime.Now,
    timespan = TimeSpan
});

方法3:使用字典构造序列化对象

如果不想定义实体类也不想用转义符,可以直接用字典结构,键名直接写字符串即可,完全避开关键字冲突问题:

var postData = new Dictionary<string, object>
{
    ["sessionid"] = guid.ToString(),
    ["personnelNumber"] = Environment.UserName,
    ["name"] = user.DisplayName,
    ["activity"] = Activity,
    ["object"] = Object,
    ["time"] = DateTime.Now,
    ["timespan"] = TimeSpan
};
var message = JsonConvert.SerializeObject(postData);

内容的提问来源于stack exchange,提问作者EyeSeeSharp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:48:03