我有一个类,当使用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属性的值时删除双引号?
答案 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')}