2014-03-12 17 views
0

我試圖把Ember-Data連接到NancyFx。我看到一些問題的一個方面是模型綁定和序列化,以滿足Ember-Data的要求。NancyFx模型綁定和序列化的Ember-Data

例如,在一個PUT,餘燼,數據發送JSON如下所示:

{"user": {"username": "fred"}} 

但NancyFx默認情況下似乎更喜歡它:

{"username": "fred"} 

有沒有什麼簡單的方法對我來說NancyFx模型綁定到Ember-Data發送它的方式?

同樣,做一個GET時,灰燼,數據需要JSON如下所示:

{ users: [{ id = 1, username = 'fred' }] } 

但NancyFx串行這樣的:

[{ id = 1, username = 'fred' }] 

有一種簡單的方法來改變NancyFx序列化爲Ember-Data所期望的格式?

回答

3

在把你應該能夠綁定到這樣的事情:

public class Model 
{ 
    public User User { get; set; } 
} 

public class User 
{ 
    public string Username { get; set; } 
} 

那是你的模塊中:

Put["/somepath/"] = p => 
{ 
    var model = this.bind<Model>(); 
    // do your thing 
} 

,並可以通過GET返回結構:

Get["/somepath/"] = p => 
{ 
    return new { Users = new [] { new { Id= 1, Username = "fred" } } }; 
} 

(謹慎的語言:沒有運行這個,它只是從內存中)

UPDATE

如果你想利用序列化和反序列化的控制,這只是一個實現2個小接口的事 - IResponseProcessorIBodyDeserializer。有關這方面的示例,請參閱this gist,其中顯示瞭如何爲協議緩衝區實施它們。

請注意,Nancy會自動發現您的IResponseProcessorIBodyDeserializer的實現,並將它們掛鉤到模型綁定和序列化中。

+0

謝謝 - 這當然有效!有一件事 - 我會用這種方法得到大量額外的類。我想知道是否可以讓反序列化器忽略第一個「用戶」標籤。我想知道我是否攻擊了這個錯誤。也許我應該改變Ember,以便它不會以這種格式序列化PUT消息。 –