ServiceStack中带有连字符的JSON属性

时间:2013-03-23 14:52:58

标签: json serialization servicestack dto

我有一些JSON形成如下:

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

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

我尝试过SnippetFormat和Snippet_Format无济于事。

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

另外,如果某个值恰好是W3C xs:dateTime string,那么我可以使用ServiceStack会自动填充的类型吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

ServiceStack.Text v3.9.43 +的

Checked into the next version,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"));