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

如何使用JSON.net序列化对象而非字符串?附相关代码需求

使用JSON.NET仅序列化对象而非字符串的解决方案

嘿,我来帮你理清这个问题!看起来你想要确保用JSON.NET序列化的是对象本身,而不是把字符串(比如已经序列化好的JSON串)当成对象去处理,避免出现带转义的嵌套字符串结果。咱们结合你给的代码来一步步说清楚。

先搞懂问题场景

举个反例,如果不小心把已经生成的JSON字符串再去序列化,就会得到奇怪的结果:

// 错误示范:序列化字符串而非原始对象
Product product = new Product { Name = "Apple" };
string alreadySerializedJson = JsonConvert.SerializeObject(product);
// 把字符串当成对象去序列化
string badResult = JsonConvert.SerializeObject(alreadySerializedJson);
// 输出会是 "\"{\\\"Name\\\":\\\"Apple\\\",...}\"" 这种带转义的字符串,完全不是你想要的对象结构

正确的对象序列化姿势

你提供的代码其实已经走在正确的路上了,核心就是要传给JsonConvert.SerializeObject()原始的对象实例,而不是字符串。我把代码补全并优化了下:

using System;
using Newtonsoft.Json;

public class Program
{
    public class Product
    {
        public string Name { get; set; }
        public DateTime Expiry { get; set; }
        public string[] Sizes { get; set; }
    }
    
    public static void Main()
    {
        // 1. 创建并初始化你的对象实例
        Product product = new Product();
        product.Name = "Apple";
        product.Expiry = new DateTime(2008, 12, 28);
        product.Sizes = new string[] { "Small" };
        
        // 2. 直接序列化对象,得到干净的JSON结构
        string json = JsonConvert.SerializeObject(product);
        Console.WriteLine(json);
        // 输出结果:{"Name":"Apple","Expiry":"2008-12-28T00:00:00","Sizes":["Small"]}
        
        // 如果你的需求是从JSON字符串还原对象后再操作:
        Product deserializedProduct = JsonConvert.DeserializeObject<Product>(json);
        // 修改对象属性
        deserializedProduct.Name = "Banana";
        // 再次序列化对象,依然得到正确的对象JSON
        string updatedJson = JsonConvert.SerializeObject(deserializedProduct);
        Console.WriteLine(updatedJson);
        // 输出结果:{"Name":"Banana","Expiry":"2008-12-28T00:00:00","Sizes":["Small"]}
    }
}

几个关键注意点

  • 认准序列化对象:一定要确保你传入SerializeObject的是像Product这样的强类型对象实例,而不是字符串类型的变量。
  • 反序列化再操作:如果手里只有JSON字符串,先通过JsonConvert.DeserializeObject<T>()把它转成对象,之后再序列化这个对象,就能保证输出的是对象的JSON结构,而不是字符串的序列化结果。
  • 默认行为就靠谱:JSON.NET默认会正确处理对象里的字符串属性,比如Name属性会直接输出"Name":"Apple",不会额外给字符串加嵌套引号,完全符合常规需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:09:41