0

編集:サーバー側で正しく機能するようにコードに変更を加えました。それでもエラーが発生します:

"現在のJSONオブジェクト(例:{"name ":" value "})をタイプ'BareCupboard.Models.RecipeIngredient []'に逆シリアル化できません。これは、タイプが正しく逆シリアル化するためにJSON配列(例:[1,2,3])を必要とするためです。このエラーを修正するには、JSONをJSON配列([1,2,3]など)に変更するか、逆シリアル化された型を通常の.NET型(整数などのプリミティブ型ではなく、コレクション型ではない)になるように変更します。 JSONオブジェクトから逆シリアル化できる配列やリストなど)。JsonObjectAttributeを型に追加して、JSONオブジェクトから強制的に逆シリアル化することもできます。パス'メッセージ'、1行目、11位。 "

通常のエンティティフレームワークモデルのクライアントが使用できるように、サーバー側のコードを正常に非正規化しています。ただし、サーバー側の対話でドロップダウンリストなどの形式でデータを変更できるようにするために、列挙型のラッパーを作成しました。

列挙型を脱シールすると、自己参照ループでスタックし、表示されます。

そのような方法で作成されたオブジェクトを脱アールするための正しい方法は何ですか。

public enum ingredientType
{
    grams = 1,
    kilograms = 2,
    millileters = 3,
    liters = 4,
    pinch = 5,
    teaspoon = 6,
    tablespoon = 7,
    whole = 8,
    Cup = 9
}

public class ingredientWrapper
{
    private ingredientType _t;
    public int value
    {
        get
        {
            return (int)_t;
        }
        set
        {
            _t = (ingredientType)value;
        }
    }
    public ingredientType EnumValue
    {
        get
        {
            return _t;
        }
        set
        {
            _t = value;
        }
    }

    public static implicit operator ingredientWrapper(ingredientType i)
    {
        return new ingredientWrapper { EnumValue = i };
    }

    public static implicit operator ingredientType(ingredientWrapper iw)
    {
        return iw.EnumValue;
    }

それは脱気化され、クライアント側でそのまま消費されます。

  public async Task<IEnumerable<Recipe>> GetAll()
    {
        HttpResponseMessage response = await _Recipeclient.GetAsync(RecipeServiceUrl);
        var jsonString = await response.Content.ReadAsStringAsync();
        return JsonConvert.DeserializeObject<Recipe[]>(jsonString);
    }
4

1 に答える 1

1
public int value
{
    get
    {
        return value;
    }
    set
    {
    }
}

無限再帰を引き起こします。これを試すことができます

public int value { get; set; }
于 2012-11-26T15:08:00.063 に答える