gpt4 book ai didi

c# - WCF - 如何使用 JavascriptSerializer 作为我的反序列化器?

转载 作者:行者123 更新时间:2023-11-30 17:14:50 27 4
gpt4 key购买 nike

我不喜欢 DataContractSerializer 处理我的字典反序列化的方式。我的方法都返回一个 Stream,我使用 JavascriptDeserializer 返回我想要的 JSON,但这对我没有帮助,字典是 POST 参数之一。

JavascriptSerializer 像这样处理字典:

{"myKey1":"myValue1", "myKey2":"myValue2"}

DataContractSerializer 这样做:

[{"Key":"myKey1", "Value":"myValue1"}, {"Key":"myKey2", "Value":"myValue2"}]

这个问题是我们的 Android 和 iPhone 应用程序在生成 native 代码时出现问题,而我们的 AJAX 调用失败了。

有什么简单的方法可以做到这一点,或者有什么方法可以绕过 Microsoft 可怕的字典反序列化?

最佳答案

我遇到了同样的问题。我通过使用实现 ISerializable 的自定义字典(实际上是包装器)解决了这个问题。

[Serializable]
public class CustomDictionary: ISerializable
{
/// <summary>
/// Inner object.
/// </summary>
private Dictionary<string, string> innerDictionary;

public CustomDictionary()
{
innerDictionary = new Dictionary<string, string>();
}

public CustomDictionary(IDictionary<string, string> dictionary)
{
innerDictionary = new Dictionary<string, string>(dictionary);
}

public Dictionary<string, string> InnerDictionary
{
get { return this.innerDictionary; }
}

//Used when deserializing
protected CustomDictionary(SerializationInfo info, StreamingContext context)
{
if (object.ReferenceEquals(info, null)) throw new ArgumentNullException("info");
innerDictionary = new Dictionary<string, string>();
foreach (SerializationEntry entry in info)
{
innerDictionary.Add(entry.Name, entry.Value as string);
}
}

//Used when serializing
protected virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
if (!object.ReferenceEquals(info, null))
{
foreach (string key in innerDictionary.Keys)
{
string value = innerDictionary[key];
info.AddValue(key, value);
}
}
}

//Add methods calling InnerDictionary as necessary (ContainsKey, Add, etc...)
}

关于c# - WCF - 如何使用 JavascriptSerializer 作为我的反序列化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8387036/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com