1

我有一些JSON是这样形成的:

 {
  "snippet-format":"raw",
  "total":1,"start":1,
  "page-length":200, ... 
 }

我有一个 C# DTO,其成员名为 Total、Start 等。这些都成功地将上面的值放入其中。我不知道如何为上面的片段格式和页面长度 JSON 项目命名属性。

我试过 SnippetFormat 和 Snippet_Format 无济于事。

有人可以指出我正确的方向。

另外,如果一个值恰好是 a W3C xs:dateTime string,是否有一种我可以使用的类型ServiceStack会自动为我填充?

提前致谢。

4

1 回答 1

0

签入下一个版本的 ServiceStack.Text v3.9.43+,Lenient 属性约定现在支持连字符属性,因此您将能够:

public class Hyphens
{
    public string SnippetFormat { get; set; }
    public int Total { get; set; }
    public int Start { get; set; }
    public int PageLength { get; set; }
}

JsConfig.PropertyConvention = JsonPropertyConvention.Lenient;

var json = @"{
    ""snippet-format"":""raw"",
    ""total"":1,
    ""start"":1,
    ""page-length"":200
 }";

var dto = json.FromJson<Hyphens>();

Assert.That(dto.SnippetFormat, Is.EqualTo("raw"));
Assert.That(dto.Total, Is.EqualTo(1));
Assert.That(dto.Start, Is.EqualTo(1));
Assert.That(dto.PageLength, Is.EqualTo(200));

与此同时,您将不得不动态解析它,例如:

var map = JsonObject.Parse(json);
Assert.That(map["snippet-format"], Is.EqualTo("raw"));
Assert.That(map["total"], Is.EqualTo("1"));
Assert.That(map["start"], Is.EqualTo("1"));
Assert.That(map["page-length"], Is.EqualTo("200"));
于 2013-03-23T16:51:39.337 回答