1

我喜欢使用 servicestack 的 IRestClient 来测试我的 api 的简单性,但是当有人发送不完整的对象时,我需要复制一个测试场景。例如,如果我的 dto 看起来像这样:

public class Todo
    {
        public long? Id { get; set; }
        public string Content { get; set; }
        public int? Order { get; set; }
        public bool? Done { get; set; }
    } 

我想用这样的部分json做一个PUT:

{"Id": 99999, "Order":1}

如何使用 json 客户端仅发送上述内容。如果我使用类型化的版本,客户端会发送带有默认值的整个对象。

4

1 回答 1

4

我认为使用 ServiceStack 的Http Utils(链接是 POST,但适用于 PUT)来 PUT 数据可能更容易。

"http://localhost/todo"
    .PutJsonToUrl(@"{""Id"":9999,""Order"":1}");

另外,我不确定您要测试的确切内容。但是,如果您正在测试您的服务,则请求(您的 json 字符串)将被反序列化(很确定使用 ServiceStack.Text)到 Todo 类中,因此它将获取具有缺失字段默认值的对象。请参阅下面的测试。

    [Test]
    public void TestJson()
    {
        var json = @"{""Id"": 99999, ""Order"":1}";

        var todo = new ServiceStack.Text.JsonSerializer<Todo>().DeserializeFromString(json);

        Assert.IsNull(todo.Done);
        Assert.IsNull(todo.Content);
    }
于 2013-05-09T14:25:25.670 回答