尽管我同意JavascriptSerializer是胡扯,而Json.Net是更好的选择,但是您可以通过一种方法使JavascriptSerializer序列化所需的方式。您将必须注册一个转换器,并使用如下方法覆盖Serialize方法:
public class KeyValuePairJsonConverter : JavascriptConverter{ public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavascriptSerializer serializer) { var instance = Activator.CreateInstance(type); foreach (var p in instance.GetType().GetPublicProperties()) { instance.GetType().GetProperty(p.Name).SetValue(instance, dictionary[p.Name], null); dictionary.Remove(p.Name); } foreach (var item in dictionary) (instance).Add(item.Key, item.Value); return instance; } public override IDictionary<string, object> Serialize(object obj, JavascriptSerializer serializer) { var result = new Dictionary<string, object>(); var dictionary = obj as IDictionary<string, object>; foreach (var item in dictionary) result.Add(item.Key, item.Value); return result; } public override IEnumerable<Type> SupportedTypes { get { return new ReadOnlyCollection<Type>(new Type[] { typeof(your_type) }); } }}JavascriptSerializer javascriptSerializer = new JavascriptSerializer();javascriptSerializer.RegisterConverters(new JavascriptConverter[] { new ExpandoJsonConverter() });jsonOfTest = javascriptSerializer.Serialize(test);// {"x":"xvalue","y":"/Date(1314108923000)/"}
希望这可以帮助!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)