お知らせ
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が空なのか否かのチェックもできるかと思います。