gpt4 book ai didi

c# - 使用 ServiceStack 的 JsonSerializer 序列化包含一些空项的数组

转载 作者:太空宇宙 更新时间:2023-11-03 13:07:45 24 4
gpt4 key购买 nike

在 ServiceStack 3.9 中,当反序列化包含一些空值的 JSON 数组时,空值被反序列化为空值,正如我所料。但是,当我再次将同一个数组序列化回 JSON 时,空值变成空对象。

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
}

这是预期的行为吗?或者是否有另一种方法来序列化包含一些空值的数组,并让空项在 JSON 中显示为空值而不是空对象?

请注意,在序列化文字数组(如字符串)时,空值将作为空值而不是对象返回。

最佳答案

我也遇到过这个问题。我发现如果在调用 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();

关于c# - 使用 ServiceStack 的 JsonSerializer 序列化包含一些空项的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30180296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com