2012-01-24 18 views
2

我有下面的類序列化類作爲一個單一的JSON字符串在ASP.NET MVC

[Serializable] 
public class ApiRequestStatus :IEquatable<ApiRequestStatus> 
{ 
    public static readonly ApiRequestStatus Failure = 
              new ApiRequestStatus("Failure"); 
    public static readonly ApiRequestStatus Success = 
              new ApiRequestStatus("Success"); 

    private string _status; 

    private ApiRequestStatus(string status) 
    { 
     this._status = status; 
    } 

    public override string ToString() 
    { 
     return _status; 
    } 

    public bool Equals(ApiRequestStatus other) 
    { 
     return this._status == other._status; 
    } 
} 

當這是使用System.Web.Script.Serialization.JavaScriptSerializer我想它序列化爲字符串"Failure""Success"序列化。

我試過實現一個自定義JavaScriptConverter,但這會呈現我的對象作爲一個對象具有零個或多個屬性,具體取決於我返回的IDictionary<string, object>

例如當我返回並清空IDictionary<string, object>我的對象顯示爲空的JavaScript對象:{ }

如果我返回new Dictionary<string, object> { {"_status", status._status}}我的對象顯示爲{ "_status" : "Success" }

如何序列化對象的字符串值爲_status字段?

+0

不能說它是否工作,但你可以嘗試使用「公共靜態隱式運算符字符串(ApiRequestStatus apiRs){返回apiRs._狀態}」。這應該至少使你能夠做到「string s = apiRequestStatusObj;」然後「s」應包含狀態。 (隱式運算符應該在你的課堂上) – Joakim

+0

@Joakim不幸的是沒有任何效果。歡呼 –

回答

1

ToJsonString()方法添加到您的班級,並手動控制序列化 - 在這種情況下,直接序列化_status成員。

對於所有其他/默認行爲,只需序列化this(這可以繼承以保持整潔)並返回它。

+0

不幸的是'ApiRequestStatus'對象是一個更大的頂級對象的一部分,它正在使用'JavaScriptSerializer'進行序列化,所以我無法分別獲得每個對象的粒度控制。 –

1

我解決了這個問題由我切換到ApiRequestStatus枚舉和使用Json.NET串行結合JsonConverter attribute,但我仍然有興趣看看這是否可能與JavaScriptSerializer

相關問題