各オブジェクトのすべてのプロパティの名前と値を取得する必要があります。それらのいくつかは参照型なので、次のオブジェクトを取得した場合:
public class Artist {
public int Id { get; set; }
public string Name { get; set; }
}
public class Album {
public string AlbumId { get; set; }
public string Name { get; set; }
public Artist AlbumArtist { get; set; }
}
Album
オブジェクトからプロパティを取得するときは、ネストされているAlbumArtist.Id
プロパティの値も取得する必要があります。AlbumArtist.Name
これまでに次のコードがありますが、ネストされたコードの値を取得しようとすると、 System.Reflection.TargetExceptionがトリガーされます。
var valueNames = new Dictionary<string, string>();
foreach (var property in row.GetType().GetProperties())
{
if (property.PropertyType.Namespace.Contains("ARS.Box"))
{
foreach (var subProperty in property.PropertyType.GetProperties())
{
if(subProperty.GetValue(property, null) != null)
valueNames.Add(subProperty.Name, subProperty.GetValue(property, null).ToString());
}
}
else
{
var value = property.GetValue(row, null);
valueNames.Add(property.Name, value == null ? "" : value.ToString());
}
}
したがって、If
ステートメントでは、プロパティが参照型の名前空間の下にあるかどうかを確認します。その場合は、ネストされたすべてのプロパティ値を取得する必要がありますが、そこで例外が発生します。