Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you get System.Web.Script.javascriptSerializer to ignore a property?

[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
}
like image 837
Maslow Avatar asked Jan 23 '10 21:01

Maslow


People also ask

What is the use of JavaScriptSerializer in C#?

NET Framework, use Newtonsoft. Json. The JavaScriptSerializer class is used internally by the asynchronous communication layer to serialize and deserialize the data that is passed between the browser and the Web server. You cannot access that instance of the serializer.

Where is System Web script serialization?

Serialization is in the System. Web. Extensions library.

What is JavaScriptSerializer in VB net?

Serialization (in VB.NET). SERIALIZATION. For serialization purpose the JavaScriptSerializer has the following method: - Serialize – this method serializes an object and converts it to a JSON string. This means, when we need to serialize a Dictionary, we will need to convert it to object type.


1 Answers

Normally I would suggest telling it to ignore parent properties (which create cycles) - in this case by adding [ScriptIgnore] - but I can't see anything other than basic members - is this class by itself enough to cause the error?

like image 177
Marc Gravell Avatar answered Oct 05 '22 20:10

Marc Gravell