【问题标题】:How do you get System.Web.Script.javascriptSerializer to ignore a property?你如何让 System.Web.Script.javascriptSerializer 忽略一个属性?
【发布时间】:2010-01-23 21:41:40
【问题描述】:
[Serializable]
public class ModelResource:ISerializable
{
   public Int64 Ore { get; private set; }
   public Int64 Crystal { get; private set; }
   public Int64 Hydrogen { get; private set; }
   //needs to be ignored
   public Int64 Total { get { return Ore + Hydrogen + Crystal; } }
   public string ResourceType { get; private set; }
   public Int64 HerculesNeeded { get { return Total / 25000; } }
   public Int64 AtlasNeeded { get { return Total / 5000; } }

   public bool IsPlanet { get { return ResourceType == "Planet"; } }
   //causes serializer to stackoverflow
   public ModelResource MakeChild {get{return new ModelResource(Ore/2,Crystal/2,Hydrogen/2);}}


    public string ToJson()
    {
        var jss = new System.Web.Script.Serialization.JavaScriptSerializer(new SimpleTypeResolver());
        return jss.Serialize(this); //throws recursion limit exceed exception
    }
    #region ISerializable Members

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("Ore", Ore);
        info.AddValue("Crystal", Crystal);
        info.AddValue("Hydrogen", Hydrogen);
        info.AddValue("ResourceType", ResourceType);
    }
    private ModelResource(SerializationInfo si, StreamingContext context)
    {
        Ore = si.GetInt64("Ore");
        Crystal = si.GetInt64("Crystal");
        Hydrogen = si.GetInt64("Hydrogen");
        ResourceType = si.GetString("ResourceType");
    }


    #endregion
}

【问题讨论】:

  • 你能展示一个调用 ToJson 的代码示例吗?当我尝试它时它不会抛出......
  • 我怀疑至少有 一些 代码被省略了,因为没有设置值的好方法 - ?

标签: c# serialization javascriptserializer


【解决方案1】:

通常我会建议告诉它忽略父属性(这会创建循环) - 在这种情况下,通过添加 [ScriptIgnore] - 但除了基本成员之外我看不到任何东西 - 这个类本身是否足以导致错误?

【讨论】:

  • 显然我遗漏了那个属性,我想也许 javascriptSerializer 会关注 ISerializable 接口
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多