StringReader sr = new StringReader(jsonText); Newtonsoft.Json.JsonTextReader reader = new JsonTextReader(sr); object result = json.Deserialize(reader, valueType); reader.Close();
return result; }
在NET.JSON的基础上使用JavascriptSeriazible来转换: 复制代码 代码如下: internal class WebExtensionsJavaScriptSerializer : JSONSerializerBase, IJSONSerializer { public WebExtensionsJavaScriptSerializer(JSONSerializer serializer) : base(serializer) {}
public string Serialize(object value) { JavaScriptSerializer ser = new JavaScriptSerializer();
List<JavaScriptConverter> converters = new List<JavaScriptConverter>();
if (value != null) { Type type = value.GetType(); if (type == typeof(DataTable) || type == typeof(DataRow) || type == typeof(DataSet)) { converters.Add(new WebExtensionsDataRowConverter()); converters.Add(new WebExtensionsDataTableConverter()); converters.Add(new WebExtensionsDataSetConverter()); }
if (converters.Count > 0) ser.RegisterConverters(converters); }
return = ser.Serialize(value); } public object Deserialize(string jsonText, Type valueType) { // *** Have to use Reflection with a "dynamic" non constant type instance JavaScriptSerializer ser = new JavaScriptSerializer();
object result = ser.GetType() .GetMethod("Deserialize") .MakeGenericMethod(valueType) .Invoke(ser, new object[1] { jsonText }); return result; } }
internal class WebExtensionsDataTableConverter : JavaScriptConverter { public override IEnumerable<Type> SupportedTypes { get { return new Type[] {typeof (DataTable)}; } }
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer) { throw new NotImplementedException(); }