0

オブジェクトを取得するコントローラーにメソッドがあり、DI でサービスを作成する方法に応じて、異なる方法で逆シリアル化する必要があります。その方法はbool SetSnmpRequest(Object obj);

次にコントローラーで

public IActionResult Set([FromBody]object details)
    {
        bool setSuccesses = _devicesManager.SetSnmpRequest(details);

        if (setSuccesses)
            return Ok();

        return BadRequest();
    }

これは、クライアントから渡された JSON です。{"Name":"Power" ,"Value":"MED","ChannelIndex":"1"}

そして、私がデシリアライズしようとしているオブジェクト

public class SetRequestModel
        {
            public string Name { get; set; }
            public string Value { get; set; }
            public int ChannelIndex { get; set; } = 0;
        }

デシリアライゼーションSetRequestModel details = JsonConvert.DeserializeObject<SetRequestModel>((string)obj);

問題は、 JsonConvert.DeserializeObject が文字列を取り、オブジェクトを文字列にキャストするときに例外が発生することです

System.InvalidCastException: Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'System.String'.
4

1 に答える 1

0

ミドルウェアに任せてください。

public IActionResult Set([FromBody]SetRequestModel details)
{
    ...
}

本当にジェネリック オブジェクトを取り込みたい場合は、まずシリアル化してから逆シリアル化する必要があります。これは、文字列ではなく匿名オブジェクトとしてアクション メソッドに渡されるためです。ただし、型付きモデルをアクション シグネチャで使用することは、より良い方法と見なされます。

この公式チュートリアルを確認してください: ASP.Net Core を使用して Web API を作成する

于 2019-10-27T09:20:12.107 に答える