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

C#解析JSON时如何将嵌套对象作为字符串存入目标解析类

C# 解析JSON时将嵌套对象直接存储为字符串的实现方案

该需求完全可以实现,以下分别提供.NET生态常用的两个JSON处理库的实现方式:

方案1:使用Newtonsoft.Json(Json.NET)

方法1:使用内置JRaw类型(最简单)

直接修改映射类的属性类型为JRaw,该类型会自动保留对应节点的原始JSON内容,使用时调用ToString()即可获得字符串:

public class SampleClass {
   public string regularProperty {get;set;}
   public JRaw nestedJSON {get; set;}     
}

// 解析后获取字符串的方式
string nestedJsonStr = obj.nestedJSON.ToString();

方法2:自定义转换器保留string属性类型

如果不想修改原有类的属性类型,可自定义JsonConverter,之后给对应属性加特性即可:

// 自定义转换器
public class RawJsonConverter : JsonConverter<string>
{
    public override string ReadJson(JsonReader reader, Type objectType, string existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        using (var jToken = JToken.Load(reader))
        {
            // Formatting.Indented保留缩进换行,换为Formatting.None可输出压缩后的JSON串
            return jToken.ToString(Formatting.Indented);
        }
    }

    public override void WriteJson(JsonWriter writer, string value, JsonSerializer serializer)
    {
        writer.WriteRawValue(value);
    }
}

// 给属性加特性
public class SampleClass {
   public string regularProperty {get;set;}
   [JsonConverter(typeof(RawJsonConverter))]
   public string nestedJSON {get; set;}     
}

方案2:使用System.Text.Json(.NET Core 3.0+ 官方内置库)

官方库同样可以通过自定义转换器实现需求:

// 自定义转换器
public class RawJsonStringConverter : JsonConverter<string>
{
    public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        // 直接获取当前节点的原始JSON字符串
        return reader.GetRawText();
    }

    public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
    {
        writer.WriteRawValue(value);
    }
}

// 给属性加特性
public class SampleClass {
   public string regularProperty {get;set;}
   [JsonConverter(typeof(RawJsonStringConverter))]
   public string nestedJSON {get; set;}     
}

注意:Utf8JsonReader.GetRawText() 方法从.NET 5开始支持,低版本.NET Core 3.1需要手动读取节点序列化后返回字符串。

两种方案解析后得到的nestedJSON值完全符合预期格式,如需压缩后的无换行JSON,调整对应序列化时的格式化参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:45:02