11 Stimmen

Wie lässt sich System.Web.Script.javascriptSerializer dazu bringen, eine Eigenschaft zu ignorieren?

[Serializable]
public class ModelResource:ISerializable
{
   public Int64 Ore { get; private set; }
   public Int64 Crystal { get; private set; }
   public Int64 Hydrogen { get; private set; }
   //muss ignoriert werden
   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"; } }
   //verursacht, dass der Serialisierer stapelüberlauf
   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); //wirft Ausnahme bei Überschreitung der Rekursionsgrenze
    }
    #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 Stimmen

Können Sie einen Code-Auszug zeigen, in dem Sie ToJson aufrufen? Es wirft keinen Fehler, wenn ich es ausprobiere...

0 Stimmen

Ich vermute zumindest, dass einige Code weggelassen wurde, da es keine einfache Möglichkeit gibt, die Werte zu setzen - ?

15voto

Marc Gravell Punkte 970173

Normalerweise würde ich vorschlagen, dass es die übergeordneten Eigenschaften ignoriert (die Zyklen erzeugen) - in diesem Fall durch Hinzufügen von [ScriptIgnore] - aber ich kann nichts anderes als grundlegende Elemente sehen - ist diese Klasse allein ausreichend, um den Fehler zu verursachen?

0 Stimmen

Anscheinend habe ich dieses eine Eigenschaft ausgelassen, ich dachte, dass der JavascriptSerializer vielleicht auf das ISerializable-Interface achten würde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X