[更新]
我刚刚意识到了为什么您没有收到结果……
Deserialize方法中缺少一行。您忘记了将结果分配给您的
obj:
public static T Deserialize<T>(string json){ using (MemoryStream ms = new MemoryStream(Encoding.Unipre.GetBytes(json))) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T)); return (T)serializer.ReadObject(ms); } }另外,以下
Serialize方法仅供参考:
public static string Serialize<T>(T obj){ DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); using (MemoryStream ms = new MemoryStream()) { serializer.WriteObject(ms, obj); return Encoding.Default.GetString(ms.ToArray()); }}编辑
如果要使用Json.NET,则这里是与上面的代码等效的Serialize / Deserialize方法。
反序列化:
JsonConvert.DeserializeObject<T>(string json);
连载:
JsonConvert.SerializeObject(object o);
这已经是Json.NET的一部分,因此您可以在JsonConvert类上调用它们。
链接:
使用Json.NET序列化和反序列化JSON
现在,获得StackOverflow的原因是由于
Properties。
以这个为例:
[DataMember]public string unescapedUrl{ get { return unescapedUrl; } // <= this line is causing a Stack Overflow set { this.unescapedUrl = value; }}请注意,在中
getter,您将返回实际的属性(即,属性的getter反复调用自身),因此您将创建无限递归。
属性(在2.0中)应定义如下:
string _unescapedUrl; // <= private field[DataMember]public string unescapedUrl{ get { return _unescapedUrl; } set { _unescapedUrl = value; }}您有一个私有字段,然后在getter中返回该字段的值,然后在setter中设置该字段的值。
顺便说一句,如果您使用的是3.5 framework,则可以这样做并避免使用后备字段,而让编译器来处理:
public string unescapedUrl { get; set;}


