2010-01-23 116 views
10
[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 
} 
+0

你可以在你打给ToJson的地方显示一个代码示例吗?它不会抛出当我尝试出来... – 2010-01-23 21:47:44

+0

我怀疑至少*一些*代码已被省略,因为没有好的方法来设置值 - ? – 2010-01-23 21:54:31

回答

14

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

+0

我以为是这样,让我检查... – Maslow 2010-01-23 21:51:26

+0

显然我离开了这一个属性,我想也许JavaScriptSerializer会注意ISerializable接口 – Maslow 2010-01-23 23:43:55