使用ServiceStack執行此操作的正確方法是爲API的目的定義DTO,而不是嘗試使用現有的業務對象。如果您的客戶準備解析列表,則返回帶有字典屬性的DTO可以起作用。
一個'ServiceStack'的方法是定義一個簡單的,平坦的,具有所有可能屬性的DTO,其中每個屬性都是可空的。
鑑於DTO定義如下:
public class NullablePartials
{
public Int32? Test1 { get; set; }
public String Test2 { get; set; }
public Double? Test3 { get; set; }
}
下面的片段:
Dictionary<String, String> MyDtoDictionary = new Dictionary<String, String>();
MyDtoDictionary.Add("Test1", "7");
MyDtoDictionary.Add("Test2", "Value2");
NullablePartials result = MyDtoDictionary.ToJson().FromJson<NullablePartials>();
System.Diagnostics.Debug.WriteLine(MyDtoDictionary.ToJson());
System.Diagnostics.Debug.WriteLine(result.ToJson());
產生:使用ServiceStack.Text作爲其默認設置您的JSON庫
{"Test1":"7","Test2":"Value2"}
{"Test1":7,"Test2":"Value2"}
序列化空值。
至於最佳實踐,請參閱https://github.com/ServiceStack/ServiceStack/wiki/Advantages-of-message-based-web-services,其中討論了ServiceStack哲學。特別推薦使用:
代碼優先POCO的
由於它促進清潔,可重用的代碼,ServiceStack一直鼓勵使用代碼優先POCO對剛纔的一切。即同POCO可用於:
- 在Request和Response DTO的(客戶端和服務器)
- 在JSON,JSV和CSV文本序列化
- 作爲OrmLite,db4o的數據模型和NHibernate
- 作爲實體存儲在Redis的
- 爲Blob存儲在緩存和會話
- 下降,在MQ的服務
- 脫水複雜configuratio執行ns進入
利用不同的技術,其功能建立在POCO提供的無重複使用級別,減少摩擦,促進一致,更實用和更容易理解代碼庫。
此問題似乎是無關緊要的,因爲它是針對外部服務的支持請求,應該針對該服務。 – Ben
我不認爲問題是偏題。 – stefan2410
我對這個問題也很感興趣。我想,如果我們討論JavaScript客戶端/ jQuery Ajax,那麼根據用戶權限,使用從JSON中排除特定字段的函數是可能的。我不知道是否有這樣的功能。對於類型化的C#客戶端來說,這是不可能的,只有服務代碼將響應對象中的特定字段留空。但用戶現在會知道這些字段存在。 – stefan2410