編集:サーバー側で正しく機能するようにコードに変更を加えました。それでもエラーが発生します:
"現在の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);
}