在使用Newtonsoft的JsonConvert.SerializeObject
方法序列化时,我有一个类返回一个JSON对象,类似于:
{"id":8,"name":"floating-point","colour":"blue"}
在这里,属性值"blue"
是一个引号字符串,因为在我的类中,colour
是一个字符串。
该对象是图中的一个节点,颜色属性用于对该节点着色。我想要做的是告诉这个方法,使用这个颜色属性从Javascript函数中获取颜色,如下所示
{"id":8,"name":"floating-point","colour":getColour('floating-point')}
(这确实有效)。我不需要
{"id":8,"name":"floating-point","colour":"getColour('floating-point')"}
我正在使用一个第三方可视化工具来生成图形,所以我不能拦截/预处理颜色属性。
如何删除序列化时围绕颜色属性值的双引号?
发布于 2018-10-09 08:18:05
可以使用JsonConverter属性来控制值的序列化。
从技术上讲,这将不再是JSON,但听起来好像您有一个特定的用例需要这样做。
我正在使用一个第三方可视化工具来生成图形,所以我不能拦截/预处理颜色属性。
来源: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')}
https://stackoverflow.com/questions/52715343
复制相似问题