gpt4 book ai didi

c# - servicestack.text 将数组反序列化为对象

转载 作者:行者123 更新时间:2023-11-30 12:48:47 26 4
gpt4 key购买 nike

我有一个使用 ServicStack 构建的 REST 服务,在一次调用中用户可以发送不同类型的值。所以我在 C# 中创建了对象类型的属性。

发送的 JSON 如下所示:

{"name":"ffff","params":[{"pId":1,"value":[624,625]},{"pId":2,"value":"xxx"}]}

“值”部分:[624,625] 产生一个用“[624,625]”填充的字符串对象。我希望得到一个 int 数组或至少一个字符串数组,但它是纯字符串。我设置了 JsConfig.TryToParsePrimitiveTypeValues = true,但这似乎没有任何效果。

我尝试了来自 github 的最新资源。

这可以通过任何开关组合来完成,还是我必须自己解析?

谢谢

编辑:

这是一些测试代码:

[TestMethod]
public void JsonTest()
{
string json = "{\"name\":\"ffff\",\"params\":[{\"pId\":1,\"value\":[624,625]},{\"pId\":2,\"value\":\"xxx\"}]}";

var x = JsonSerializer.DeserializeFromString<xy>(json);
Assert.AreEqual(x.Params[0].Value.GetType(), typeof(int[]));
}

public class xy
{
public string Name { get; set; }

public List<Param> Params { get; set; }
}

public class Param
{
public int PId { get; set; }

public object Value { get; set; }
}

最佳答案

如果您将“Value”的类型更改为如下所示的 int 数组,则 ServiceStack 将序列化为 int 数组。

    public class Param
{
public int PId { get; set; }

public int[] Value { get; set; }
}

以下单元测试通过:

    [TestMethod]
public void JsonTest()
{
string json = "{\"name\":\"ffff\",\"params\":[{\"pId\":1,\"value\":[624,625]},{\"pId\":2,\"value\":\"xxx\"}]}";

var x = JsonSerializer.DeserializeFromString<xy>(json);
Assert.AreEqual(x.Params[0].Value.GetType(), typeof(int[]));
// Show that we have some integers
Assert.IsTrue(x.Params[0].Value.Count()>0);
}

如果您出于任何原因无法更改 Value 的类型,则可以根据需要使用 ServiceStack.Text 将字符串序列化为数组。

关于c# - servicestack.text 将数组反序列化为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13358393/

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