从JSON.SerializeObject字符串属性中删除双引号

时间:2018-10-09 07:18:31

标签: c#

我有一个类,当使用Newtonsoft的JsonConvert.SerializeObject方法进行序列化时,该类返回一个类似于以下内容的JSON对象:

{"id":8,"name":"floating-point","colour":"blue"}

此处的属性值"blue"是带引号的字符串,因为在我的课程colour中是字符串。

此对象是图形中的节点,并且color属性用于为节点着色。我想做的就是告诉使用此color属性的方法从像这样的Javascript函数中获取颜色

{"id":8,"name":"floating-point","colour":getColour('floating-point')}

(确实有效)。我不需要

{"id":8,"name":"floating-point","colour":"getColour('floating-point')"}

我正在使用第三方可视化工具生成图形,因此我无法截取/预处理color属性。

如何在序列化color属性的值时删除双引号?

1 个答案:

答案 0 :(得分:2)

您可以使用JsonConverter属性来控制值的序列化。

从技术上讲,它将不再是JSON,但听起来您有一个特定的用例需要此。

  

我正在使用第三方可视化工具生成图形,因此我无法截取/预处理color属性。

来源:https://blog.bitscry.com/2017/10/23/serializing-json-values-without-quotes/

您可以像这样制作JsonConverter:

public class PlainJsonStringConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(string);
    }
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        return reader.Value;
    }
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteRawValue((string)value);
    }
}

并像这样使用它:

public class Config
{
    public string ID { get; set; }

    public string Name { get; set; }

    [JsonConverter(typeof(PlainJsonStringConverter))]
    public string Colour{ get; set; }
}

以下是一个显示其正常工作的DotNetFiddle:https://dotnetfiddle.net/dhIjvT

这是输出{"ID":"8","Name":"floating-point","Colour":getColour('floating-point')}