我将 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/