2013-03-23 81 views
1

連字符在它JSON屬性我有一些JSON形成這樣的:與ServiceStack

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

我有一個C#DTO與成員稱爲總計,啓動等。這些被成功地具有從上述放置在值給他們。我不知道如何爲上面的代碼片段格式和頁面長度JSON項目命名屬性。

我試過SnippetFormat和Snippet_Format無濟於事。

有人能請我指出正確的方向。

此外,如果一個值恰好是W3C xs:dateTime string,有沒有我可以使用的類型ServiceStack會自動爲我填充?

在此先感謝。

回答

0

ServiceStack.Text v3.9.43的Checked into the next version +,在寬鬆財產約定現在支持帶有分隔符的屬性,所以你可以做:

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")); 
+0

Lenient的聲音完全像我所需要的。如果我也需要從這個類創建一個JSON文檔(例如對於PUT),我可以向類中添加什麼東西來指示ServiceStack在序列化時使用連字符嗎? – adamfowleruk 2013-03-23 18:37:59

+0

不是一個傳說,只有[JsConfig.EmitLowerCaseNames和更低的下劃線](https://github.com/ServiceStack/ServiceStack.Text/blob/master/src/ServiceStack.Text/JsConfig.cs#L284-L318)。查看'JsConfig'來查看所有ServiceStack的文本序列化器支持的功能。 – mythz 2013-03-23 19:22:40

+0

這是否也適用於下劃線,即'snippet_format'? – friism 2013-04-03 17:05:00