0

最初の投稿... 通常、私は自分の問題に対する答えを検索して見つけることができますが、今回はできません。私は他のオブジェクトの束を使用するオブジェクトを持っています:

[DataContract]
public class CoolStuff
{
    [DataMember]
    public Field[] CoolField { get; set; }

    public CoolStuff()
    {
        CoolField = SetCoolField();
    }

    private Field[] SetCoolField()
    {
        return new Field[]
        {
            new Field("Project Information", "ProjectInformation"),
            new Field("Resource Information", "ResourceInformation"),
        }
     }
}

[DataContract]
public class Field
{
    [DataMember]
    public string Prompt { get; set; }
    [DataMember]
    public string Value { get; set; }
    [DataMember]
    public bool IsLocked { get; set; }

    public Field(string prompt, string value = "n/a", bool isLocked = false)
    {
        Prompt = prompt;
        Value = value;
        IsLocked = isLocked;
    }
}

サービスからコンストラクターを呼び出します。これは、 $.getJSON(/Service.svc/coolstuff/' + id, loadCoolStuff); でシリアル化しようとすると、うまく機能します。

問題は、自分の Field クラスを別のクラスから継承させると、その .getJson 呼び出しが理由を示さずに失敗することです。

[DataContract]
public class CoolStuff
{
    [DataMember]
    public FieldBase[] CoolField { get; set; }

    public CoolStuff()
    {
        CoolField = SetCoolField();
    }

    private FieldBase[] SetCoolField()
    {
        return new FieldBase[]
        {
            new Field("Project Information", "ProjectInformation"),
            new Field("Resource Information", "ResourceInformation"),
        }
    }
}

[DataContract]
public class FieldBase
{

}

[DataContract]
public class Field : FieldBase
{
    [DataMember]
    public string Prompt { get; set; }
    [DataMember]
    public string Value { get; set; }
    [DataMember]
    public bool IsLocked { get; set; }

    public Field(string prompt, string value = "n/a", bool isLocked = false)
    {
        Prompt = prompt;
        Value = value;
        IsLocked = isLocked;
    }
}

誰かが^このコードで.getJSONへの呼び出しが失敗する理由を説明できますか? 私は本当にここで立ち往生しています。本当にありがとう!

4

1 に答える 1