1. ホーム
  2. c#

Jsonの結果がオブジェクトか配列かを判定する

2023-11-23 15:08:54

質問

.net web apiを使ってjsonを取得し、それをangularのフロントエンドに返しています。jsonはオブジェクトまたは配列のいずれかである。私のコードは現在、オブジェクトではなく配列のためにのみ動作します。私はtryparseまたはコンテンツがオブジェクトまたは配列であるかを決定する方法を見つける必要があります。

以下は私のコードです。

    public HttpResponseMessage Get(string id)
    {
        string singleFilePath = String.Format("{0}/../Data/phones/{1}.json", AssemblyDirectory, id);
        List<Phone> phones = new List<Phone>();
        Phone phone = new Phone();
        JsonSerializer serailizer = new JsonSerializer();

        using (StreamReader json = File.OpenText(singleFilePath))
        {
            using (JsonTextReader reader = new JsonTextReader(json))
            {
                //if array do this
                phones = serailizer.Deserialize<List<Phone>>(reader);
                //if object do this
                phone = serailizer.Deserialize<Phone>(reader);
            }
        }

        HttpResponseMessage response = Request.CreateResponse<List<Phone>>(HttpStatusCode.OK, phones);

        return response;
    }

上記はベストな方法ではないかもしれません。ただ、私が今やっていることです。

どのように解決するのですか?

使用方法 Json.NET を使えば、こんなことができる。

string content = File.ReadAllText(path);
var token = JToken.Parse(content);

if (token is JArray)
{
    IEnumerable<Phone> phones = token.ToObject<List<Phone>>();
}
else if (token is JObject)
{
    Phone phone = token.ToObject<Phone>();
}