c# Dtoの文字列配列化 | 株式会社アースリンク

2021年5月20日

c# Dtoの文字列配列化

c#で、DB等のデータにアクセスする際にプロパティクラスを作成するかと思います。

これらはDataContractJsonSerializerを使えば、オブジェクトからJSON文字列にも変換できます。

とある理由でDto内のプロパティに設定されている「値のみ」の一覧を作成する必要があり、その方法を紹介します。

JSON化すればプロパティを文字列にできますが、記号やらなにやらが入ってしまうので、今回は使いませんでした。

 

以下のようなプロパティクラスがあるとします。

class TestDto {
    public string FieldA { get; set; }
    public string FieldB { get; set; }
    public string FieldC { get; set; }
}

 

PropertyDescriptorを使い、Dtoオブジェクト内のプロパティ情報(値、プロパティ名)を取得し、Linqを使い各プロパティの値を配列に詰め込みます。

public static object[] ToArray<T>(this T data)
{
    List<object> values = new List<object>();

    TypeDescriptor.GetProperties(typeof(T))
        .Cast<PropertyDescriptor>()
        .ToList()
        .ForEach(s => values.Add(s.GetValue(data)));

    return values.ToArray();
}

サンプルプログラム

class Program
{

    class TestDto {
        public string FieldA { get; set; }
        public string FieldB { get; set; }
        public string FieldC { get; set; }
    }

    static void Main(string[] args)
    {
        var dto = new TestDto()
        {
            FieldA = "1",
            FieldB = "2",
            FieldC = "3",
        };

        Console.WriteLine(string.Join(",", dto.ToArray()));

        Console.ReadKey();
    }
}

 

実行結果

1,2,3

 

「values.Add(s.GetValue(data)」の部分を工夫すれば、JSON文字列の作成や、Dtoが空なのか否かのチェックもできるかと思います。

Contact
お問い合わせ

電話番号0120 - 889 - 236

受付時間:平日 9:00-18:00