【问题标题】:Serializing a class as a single JSON string in ASP.NET MVC在 ASP.NET MVC 中将类序列化为单个 JSON 字符串
【发布时间】:2012-02-17 15:27:37
【问题描述】:

我有以下课程

[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&lt;string, object&gt;

例如当我返回并清空 IDictionary&lt;string, object&gt; 时,我的对象显示为一个空的 JavaScript 对象:{ }

如果我返回 new Dictionary&lt;string, object&gt; { {"_status", status._status}},我的对象将显示为 { "_status" : "Success" }

如何将对象序列化为 _status 字段的字符串值?

【问题讨论】:

  • 不能说它是否有效,但您可以尝试使用“public static implicit operator string(ApiRequestStatus apiRs) { return apiRs._status }”。这至少应该使您能够执行“string s = apiRequestStatusObj;”然后“s”应该包含状态。 (隐式运算符应该在你的类中)
  • @Joakim 不幸的是没有任何效果。干杯

标签: javascript asp.net json asp.net-mvc-3 serialization


【解决方案1】:

ToJsonString() 方法添加到您的类,并手动控制您的序列化——在这种情况下,直接序列化_status 成员。

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

【讨论】:

  • 不幸的是,ApiRequestStatus 对象是一个更大的顶级对象的一部分,该对象正在使用JavaScriptSerializer 进行序列化,因此我无法单独对每个对象进行精细控制。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多