ServiceStack.Text:将数组反序列化为对象

4
我使用ServicStack构建了一个REST服务,在其中一个调用中,用户可以发送不同类型的值。因此,我将C#属性设置为object类型。
发送的JSON如下所示:
{"name":"ffff","params":[{"pId":1,"value":[624,625]},{"pId":2,"value":"xxx"}]}

该部分“value”:[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; }
}

你使用什么代码来反序列化这个JSON? - Cocowalla
1个回答

1
如果您将“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);
    }

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接