2010-01-23 9 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

¿Puedes mostrar un ejemplo de código donde llamas a ToJson? No arroja cuando lo intento ... –

+0

Sospecho que al menos * se ha omitido algún código, ya que no hay una buena manera de establecer los valores -? –

Respuesta

14

Normalmente yo sugeriría diciendo que hacer caso omiso de las propiedades de los padres (que crean ciclos) - en este caso mediante la adición de [ScriptIgnore] - pero no puedo ver aparte de los miembros básicos nada - es esta clase por sí mismo lo suficiente como para provocar el error ?

+0

Pensé que sí, déjame ver ... – Maslow

+0

Aparentemente dejé esa propiedad, pensé que tal vez el javascriptSerializer prestaría atención a la interfaz ISerializable – Maslow

Cuestiones relacionadas