2014-01-28 45 views
1

我想將強類型對象轉換爲動態。我怎樣才能做到這一點?將datacontract轉換爲動態

[DataContract] 
    public class Person 
    { 
     [DataMember(Name = "name")] 
     public string Name { get; set; } 

     [DataMember(Name = "birth_date")] 
     public DateTime BirthDate { get; set; } 
    } 

    public void someFunction() 
    { 
     var p = new Person {Name = "Hans", BirthDate = new DateTime(1999, 11, 1)}; 

     var p2 = ConvertToDynamic(p); 

     Assert.That(p2.name, Is.SameAs("Hans")); 
     Assert.That(p2.birth_date, Is.SameAs(new DateTime(1999, 11, 1))); 
    } 

    private static dynamic ConvertToDynamic(Person person) 
    { 
     throw new NotImplementedException(); 
    } 

一個快速和骯髒的方法可能是使用一個序列化器。有什麼更好的嗎?

我想避免instanciating一個ExpandoObject並手動設置每個屬性。

回答

1

也許這會做到這一點:

private static dynamic ConvertToDynamic(Person person) 
{ 
    return person as dynamic; 
} 

或者你可以嘗試retrurning匿名類型:

private static dynamic ConvertToDynamic(Person person) 
{ 
    return new { person.Name, person.BirthDate }; 
}