考慮以下class和struct對象序列化的AJAX,WCF和ViewState中
public class Entity {
public IdType Id {get;set;}
public string Data {get;set;}
}
[TypeConverter(IdTypeConverter))]
public struct IdType {
... any data ...
}
的IdTypeConverter可這裏的idtype從結構和字符串轉換。
現在,我想要的是這個類可以爲AJAX,WCF和ViewState序列化。 senario可以是一個WCF Web服務,它將一個Entity []數組提供給一個DataSource。並且綁定到數據源的自定義控件將該類保存到ViewState中,並將數據發送到客戶端代碼。
只需在所有序列化類型中添加一個[Serializable]屬性即可輕鬆實現。但我不希望IdType被序列化,而是要轉換爲字符串。因此,JSON表示應該是
{ 'Id'=>'StringRepresentationOfId', 'Data'=>'foo' }
這將類似地是WCF和ViewState的最佳序列化。
另一種解決辦法是寫另一個類
public class JsonEntity {
public JsonEntity(Entity from) {
Id = from.Id;
Data = from.Data;
}
public string Id {get;set;}
public string Data {get;set;}
}
,並使用這個JsonSerialization。但我不喜歡這樣,因爲這意味着將數據發送給客戶端的控件知道實體類型。
實際的問題是:是否可以使用屬性定製JsonSerialization而不破壞WCF和ViewState序列化?
編輯: 像「不可能」的答案會滿足我,因爲我會停止嘗試。
這個JavaScriptConverter類型看起來不錯。有沒有告訴JsonSerializer使用自定義JavaScriptConverter的屬性? – 2010-06-30 20:13:34
我不認爲這是一個屬性,但請查閱http://nayyeri.net/custom-json-serialization-in-asp-net-ajax上的文章。它顯示瞭如何將JavaScriptConverter註冊到配置文件中。不過,我還沒有機會驗證這一點。 – 2010-06-30 20:23:12