以下代码:
var json = JsonConvert.SerializeObject(fooObject,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
});
Seralizes一个json(string)对象:
{ “fooA”:0, “fooB”:0, “fooC”:假的, “民以食为天”:假的, “fooE”:0, “fooF”:0, }
值不在引号中,例如“fooA”:“0”。这是我想要的行为。
有没有办法强制执行此行为?
答案 0 :(得分:3)
在JSON格式中,数字和布尔值没有引号,而字符串则有(参见JSON.org)。
如果你想要所有原语的引号,你有几个选择:
string
类型。Dictionary<string, string>
(或DTO)并将其序列化。JsonConverter
进行转化。此选项的优势在于它可以全局应用,因此您无需更改所有课程。前两个选项非常明显。如果您选择使用转换器,代码可能如下所示:
class PrimitiveToStringConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType.IsPrimitive;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(value.ToString().ToLower());
}
public override bool CanRead
{
get { return false; }
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
要使用它,只需将转换器的实例传递给JsonConvert.SerializeObject
方法。
string json = JsonConvert.SerializeObject(foo, new PrimitiveToStringConverter());
演示:
class Program
{
static void Main(string[] args)
{
Foo foo = new Foo
{
Int = 6,
Bool = true,
Float = 3.14159
};
string json = JsonConvert.SerializeObject(foo, new PrimitiveToStringConverter());
Console.WriteLine(json);
}
}
class Foo
{
public int Int { get; set; }
public bool Bool { get; set; }
public double Float { get; set; }
}
输出:
{"Int":"6","Bool":"true","Float":"3.14159"}