2010-01-23 8 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을 호출 할 때 코드 샘플을 표시 할 수 있습니까? 그것을 시도 할 때 그것은 던지지 않습니다 ... –

+0

값을 설정하는 좋은 방법이 없기 때문에 최소한 * 일부 코드가 생략되었습니다. -? –

답변

14

일반적으로 부모 속성 (사이클을 생성 함)을 무시하도록 제안합니다.이 경우에는 [ScriptIgnore]을 추가합니다.하지만 기본 멤버 이외의 다른 것은 볼 수 없습니다.이 클래스 자체만으로도 오류가 발생할 수 있습니다. ?

+0

나는 그렇게 생각했다. – Maslow

+0

분명히 나는 ​​그 속성 하나를 남겼다. 아마 javascriptSerializer가 ISerializable 인터페이스에주의를 기울일 것이라고 생각했다. – Maslow

관련 문제