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