为什么c#JavaScriptSerializer.Serialize返回空方括号
为什么下面的代码返回“[]”时应该返回“{”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);
PS dg类看起来像这样:
public class dg : ScheduleObserver, ILibrary, IEnumerable { public int id; public string title; private List dList; ...many getters and setters and some logic functions... } public abstract class ScheduleObserver{ public abstract void update(); } public interface ILibrary { List getPDs(); void setPDs(List newPDs); int getCurrentIndex(); void addPD(PD pD); PD getPD(int index); }
非常感谢。
谢谢 – 成功回答 – 这是IEnumerable,这是我的困境的根源。 为了解决这个问题,dg不再扩展IEnumerable,并且所有foreach(dg …)循环都已转换回for(int i = 0 …)循环。
非常非常非常感谢! 詹姆斯得到了为什么它是空的,帕尔夫得到了为什么有方括号。 将两者都标记为答案,但只能标记一个。
从源头看 ,问题似乎是几件事的结合。
正如@Parv已经指出你得到[]
的原因是因为你的类实现了IEnumerable
所以序列化器尝试迭代对象然后独立地序列化每个项目。 您当前的设计不会起作用,因为它不是为实现IEnumerable
类型序列化公共属性而设计的。
另一个问题,就像我在评论中提到的那样,你的类似乎没有任何公共属性,你现在拥有的是公共变量 。 为了让序列化器工作,你需要属性设置器/ getter,即
public class dg { public int id { get; set; } public string title { get; set; } ... }
问题可能是因为dg
类inheritance了IEnumerable
, JavaScriptSerializer
将它视为一个Array
,因此方括号。
试着做
var result = serializer.Serialize( new dg(1999, "hithere").Select(d => new{ id = d.id, title = d.title }));