Ran*_*ger -2 .net format json json.net
以下代码:
var json = JsonConvert.SerializeObject(fooObject,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
});
Run Code Online (Sandbox Code Playgroud)
序列化一个 json(字符串)对象:
{ "fooA":0, "fooB":0, "fooC":false, "fooD":false, "fooE":0, "fooF":0, }
值不在引号中,例如 "fooA":"0"。这是我想要的行为。
有没有办法强制执行这种行为?
在 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();
}
}
Run Code Online (Sandbox Code Playgroud)
要使用它,只需将转换器的实例传递给该JsonConvert.SerializeObject方法。
string json = JsonConvert.SerializeObject(foo, new PrimitiveToStringConverter());
Run Code Online (Sandbox Code Playgroud)
演示:
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; }
}
Run Code Online (Sandbox Code Playgroud)
输出:
{"Int":"6","Bool":"true","Float":"3.14159"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6027 次 |
| 最近记录: |