在ASP.NET MVC中将类序列化为单个JSON字符串

Serializing a class as a single JSON string in ASP.NET MVC

本文关键字:序列化 单个 JSON 字符串 ASP NET MVC      更新时间:2023-09-26

我有以下类

[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字段的字符串值

ToJsonString()方法添加到类中,并手动控制序列化-在本例中,直接序列化_status成员。

对于所有其他/默认行为,只需序列化this(这可以被继承以保持整洁)并返回它。

我通过将ApiRequestStatus切换到枚举并将Json.NET序列化程序与JsonConverter属性结合使用来解决此问题,但我仍然有兴趣看看JavaScriptSerializer是否可以做到这一点。