Haben Sie bei der Kompilierung-Zeit, um die Namen der Eigenschaften wissen? Denn Sie können dies tun:
public static T CastByExample<T>(object o, T example) {
return (T)o;
}
public static object MyMethod(object obj) {
var example = new { FirstProperty = "abcd", SecondProperty = 100 };
var casted = CastByExample(obj, example);
return new {
FirstProperty = casted.FirstProperty,
SecondProperty = casted.SecondProperty,
AddedProperty = true
};
}
Dann:
var extendedObject = MyMethod(
new {
FirstProperty = "abcd",
SecondProperty = 100
}
);
var casted = CastByExample(
extendedObject,
new {
FirstProperty = "abcd",
SecondProperty = 100,
AddedProperty = true
}
);
Console.WriteLine(xyz.AddedProperty);
Beachten Sie, dass dies auf die Tatsache sehr stark angewiesen, dass zwei anonyme Typen in derselben Assembly mit Eigenschaften den gleichen Namen des gleichen Typs, die in die gleiche Reihenfolge ist vom selben Typ.
Aber, wenn Sie das tun, warum nicht einfach konkrete Typen machen?
Ausgang:
True
Warum tun Sie das mit anonymen Klassen? – jason
Ich arbeite mit ASP.NET MVC, wo ich möchte, dass JSON-Daten mit meinen Debug-Informationen erweitert werden. –