JsonTextWriter使用ToString()将null序列化为“null”

时间:2016-11-12 17:17:14

标签: c# json.net

我正在使用JSON.NET的JsonTextWriter,如下所示:

var writer = new StringWriter();
var textWriter = (TextWriter)writer;
var jsonTextWriter = new JsonTextWriter(textWriter);

jsonTextWriter.WriteNull();

var data = jsonTextWriter.ToString();

如何实现该数据将是空字符串而不是"null"

1 个答案:

答案 0 :(得分:3)

此实例中JsonTextWriter的行为是正确的;要在JSON中表示空值,预期的标记为null。例如:

{
    "Name"    : "SomeGuy",
    "Address" : null
}

从您的问题来看,您似乎要做的就是写一个实际的空字符串来表示完全缺乏价值。你可以通过致电jsonTextWriter.WriteRaw("")来做到这一点。但是,这将产生无效的JSON,因为您最终得到:

{
    "Name"    : "SomeGuy",
    "Address" : 
}

我猜你也不想要你想要的。要发出一个实际上代表JSON中空字符串值的空字符串,您将要jsonTextWriter.WriteValue("")这将生成我认为您正在寻找的预期""令牌,这看起来像像:

{
    "Name"    : "SomeGuy",
    "Address" : ""
}

作为一个完整的例子,发出我一直在使用的对象将是这样的:

var writer = new StringWriter();
var textWriter = (TextWriter)writer;
var jsonTextWriter = new JsonTextWriter(textWriter);

jsonTextWriter.WriteStartObject();
jsonTextWriter.WritePropertyName("Name");
jsonTextWriter.WriteValue("SomeGuy");
jsonTextWriter.WritePropertyName("Address");
jsonTextWriter.WriteValue("");
jsonTextWriter.WriteEndObject();

var data = writer.ToString();

希望有所帮助。