c# - 将附加参数传递给 JavascriptSerializer

标签 c# json

我将 JavascriptSerializer 与自定义 JavascriptConverter 一起使用,如下所示:

public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
   SomeObjectModel TheObject = obj as SomeObjectModel;
   Dictionary<string, object> OutputJson = new Dictionary<string, object>();

   OutputJson.Add("SomeKey", SomeObjectModel.SomeProperty);

   return OutputJson;
}

现在我希望能够在运行时动态更改 SomeKey,所以我想创建一个键字典,将这个字典传递给序列化程序,然后执行如下操作:

OutputJson.Add(TheJsonDictionary.SomeKey, SomeObjectModel.SomeProperty);

但是,当我像这样向函数调用添加参数时:

public override IDictionary<string, object> Serialize(Dictionary<string, string> TheJsonDictionary, object obj, JavaScriptSerializer serializer)

我在编译时收到一条错误消息。现在我知道为什么我会收到这个错误(抽象方法定义了 2 个参数,我传递了 3 个),我想知道如何解决这个问题,以便我可以传入一个字典来对键进行编码。

谢谢。

最佳答案

我想唯一的解决方法是子类化 JavaScriptSerializer 并重新实现 Serialize 方法以接受任意 TheJsonDictionary 字典:

class CustomJavaScriptSerializer : JavaScriptSerializer
{
    public Dictionary<string, string> TheJsonDictionary { get; private set; }

    public string Serialize(object obj, Dictionary<string, string> TheJsonDictionary = null)
    {
        this.TheJsonDictionary = TheJsonDictionary;
        return base.Serialize(obj);
    }
}

现在在您的自定义转换器中,您可以将序列化程序对象转换回 CustomJavaScriptSerializer 并获取键的自定义字典:

public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
    var TheJsonDictionary = (serializer as CustomJavaScriptSerializer).TheJsonDictionary;

    // rest of method
}

关于c# - 将附加参数传递给 JavascriptSerializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14322020/

相关文章:

c# - 使用 AttributeTargets.Class 对自定义 ValidationAttribute 进行客户端验证

mysql - 为 MongoDB 设计数据模型

c - Jansson lib 解析器

类型参数化抽象类的 C# 构造函数

c# - 如何使用 C# 取消散列?

c# - Html.DropDownList 如果为空则禁用

javascript - 无法获取 JSON 响应项

javascript - 使用 KnockoutJS 从 API 加载字段后,将字段添加到 observableArray

html - 发布 JSON 与传统表单编码数据作为提交表单的数据格式

c# - 想要在 Asp.net Web 应用程序上运行 WPF 应用程序。