Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to convert a dynamic or anonymous object to a strongly typed, declared object?

If I have a dynamic object, or anonymous object for that matter, whose structure exactly matches that of a strongly typed object, is there a .NET method to build a typed object from the dynamic object?

I know I can use a LINQ dynamicList.Select(dynamic => new Typed { .... } type thing, or I can use Automapper, but I'm wondering if there is not something specially built for this?

like image 249
ProfK Avatar asked Jun 14 '13 04:06

ProfK


1 Answers

You could serialize to an intermediate format, just to deserialize it right thereafter. It's not the most elegant or efficient way, but it might get your job done:

Suppose this is your class:

// Typed definition class C {     public string A;     public int B; } 

And this is your anonymous instance:

// Untyped instance var anonymous = new {     A = "Some text",     B = 666 }; 

You can serialize the anonymous version to an intermediate format and then deserialize it again to a typed version.

var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); var json = serializer.Serialize(anonymous); var c = serializer.Deserialize<C>(json); 

Note that this is in theory possible with any serializer/deserializer (XmlSerializer, binary serialization, other json libs), as long as the roundtrip is symmetric.

like image 190
Grimace of Despair Avatar answered Sep 22 '22 01:09

Grimace of Despair