Newtonsoft Json序列化一个类,其中一个属性是JSON

Seb*_*ten 3 c# json.net asp.net-web-api2

我正在使用Newtonsoft Json序列化(使用Web API 2).

我的类中的一个公共属性是一个包含JSON数据的String.我想序列化我的类,并包含这个公共属性,但我不希望序列化程序处理/修改此字符串的内容.

有什么方法可以包含这个属性,但不要弄乱它的内容吗?

Bri*_*ers 7

您可以创建一个JsonConverter将字符串属性的原始值写入输出而不更改它.您负责确保字符串具有有效的JSON,否则结果输出也不是有效的JSON.

以下是转换器的外观:

class RawJsonConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return (objectType == typeof(string));
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        // write value directly to output; assumes string is already JSON
        writer.WriteRawValue((string)value);  
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        // convert parsed JSON back to string
        return JToken.Load(reader).ToString(Formatting.None);  
    }
}
Run Code Online (Sandbox Code Playgroud)

要使用它,请使用如下属性标记您的JSON属性[JsonConverter]:

class Foo
{
    ...
    [JsonConverter(typeof(RawJsonConverter))]
    public string YourJsonProperty { get; set; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

这是一个演示:https://dotnetfiddle.net/BsTLO8


归档时间:

查看次数:

1579 次

最近记录:

9 年,11 月 前