4

ServicStack を使用した REST サービス ビルドがあり、1 回の呼び出しでユーザーはさまざまな種類の値を送信できます。なのでC#でオブジェクト型のプロパティを作ってみました。

送信される 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; }
}
4

1 に答える 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);
    }

何らかの理由で Value の型を変更できない場合は、ServiceStack.Text を使用して、必要に応じて文字列を配列にシリアル化できます。

于 2013-03-07T10:48:47.097 に答える