C# 使用ServiceStack';s JsonSerializer来序列化包含一些空项的数组
在ServiceStack 3.9中,当反序列化包含一些空值的JSON数组时,空值被反序列化为空值,正如我所期望的那样。然而,当我再次将同一数组序列化回JSON时,空值将变成空对象C# 使用ServiceStack';s JsonSerializer来序列化包含一些空项的数组,c#,json,serialization,servicestack,C#,Json,Serialization,servicestack,在ServiceStack 3.9中,当反序列化包含一些空值的JSON数组时,空值被反序列化为空值,正如我所期望的那样。然而,当我再次将同一数组序列化回JSON时,空值将变成空对象 public class MyClass { public string Foo { get; set; } } [Fact] public void Test() { var originalJson = "[{\"Foo\":\"Bar\"},null]";
public class MyClass
{
public string Foo { get; set; }
}
[Fact]
public void Test()
{
var originalJson = "[{\"Foo\":\"Bar\"},null]";
var arr = ServiceStack.Text.JsonSerializer.DeserializeFromString<MyClass[]>(originalJson);
var result = ServiceStack.Text.JsonSerializer.SerializeToString(arr);
// output is actually: [{"Foo":"Bar"},{}]
Assert.Equal(originalJson, result); // fails
}
公共类MyClass
{
公共字符串Foo{get;set;}
}
[事实]
公开无效测试()
{
var originalJson=“[{\“Foo\”:\“Bar\”},null]”;
var arr=ServiceStack.Text.JsonSerializer.DeserializeFromString(originalJson);
var result=ServiceStack.Text.JsonSerializer.SerializeToString(arr);
//输出实际上是:[{“Foo”:“Bar”},{}]
Assert.Equal(originalJson,result);//失败
}
这是预期的行为吗?或者有没有其他方法可以序列化包含一些null的数组,并使null项在JSON中显示为null而不是空对象
请注意,当序列化文本数组(如字符串)时,空值作为空值返回,而不是作为对象返回。我也遇到了这个问题。我发现,如果在调用
SerializeToString()
之前将数组强制转换为object[]
,那么null
值将按预期输出
var result = ServiceStack.Text.JsonSerializer.SerializeToString((object[])arr);
// result is correct [{"Foo":"Bar"}, null]
您可以使用此JsConfig
全局设置MyClass
的序列化:
JsConfig<MyClass[]>.RawSerializeFn = (obj) => ((object[])obj).ToJson();
JsConfig.fn=(obj)=>((object[])obj.ToJson();