为什么下面的代码应该返回“{”id”:1999,“title”:“hithere”}却返回“[]”
JavaScriptSerializer serializer = new JavaScriptSerializer();
StringBuilder sbJsonResults = new StringBuilder();
var result = serializer.Serialize(new dg(1999, "hithere"));
context.Response.Clear();
context.Response.ContentType = "application/json; charset=utf-8";
context.Response.Cache.SetExpires(DateTime.MinValue);
context.Response.Write(result);
附: dg 类如下所示:
public class dg : ScheduleObserver, ILibrary, IEnumerable {
public int id;
public string title;
private List<d> dList;
...many getters and setters and some logic functions...
}
public abstract class ScheduleObserver{
public abstract void update();
}
public interface ILibrary {
List<PD> getPDs();
void setPDs(List<PD> newPDs);
int getCurrentIndex();
void addPD(PD pD);
PD getPD(int index);
}
非常感谢。
谢谢 - 成功回答 - IEnumerable 是我痛苦的根源。为了解决这个问题,dg 不再扩展 IEnumerable,并且所有 foreach (dg...) 循环已转换回 for(int i = 0...) 循环。
非常非常感谢!詹姆斯明白了为什么它是空的,帕尔夫明白了为什么有方括号。会将两者都标记为答案,但只能标记一个。
看着source http://www.dotnetframework.org/default.aspx/4@0/4@0/untmp/DEVDIV_TFS/Dev10/Releases/RTMRel/ndp/fx/src/xsp/System/Extensions/Script/Serialization/JavaScriptSerializer@cs/1305376/JavaScriptSerializer@cs这个问题似乎是由几个因素共同造成的。
正如@Parv 已经指出你得到的原因[]
是因为你的类实现了IEnumerable
所以序列化器尝试iterate对象,然后独立序列化每个项目。您当前的设计将无法工作,因为它并非旨在序列化实现的类型的公共属性IEnumerable
.
另一个问题,就像我在评论中提到的,是你的类似乎没有任何公共属性,你目前拥有的都是公共的变量。为了使序列化器工作,您需要属性设置器/获取器,即
public class dg
{
public int id { get; set; }
public string title { get; set; }
...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)