tôi nghĩ ASP.NET MVC không lối ra vào thời điểm câu hỏi này đã được thực hiện. Nó chuyển đổi các đối tượng ẩn danh thành từ điển trong nội bộ.
Chỉ cần xem ví dụ HtmlHelper
class. Phương thức dịch các đối tượng thành từ điển là AnonymousObjectToHtmlAttributes
. Nó là specifc để MVC và trả về một RouteValueDictionary
, tuy nhiên.
Nếu bạn muốn một cái gì đó chung chung hơn, hãy thử này:
public static IDictionary<string,object> AnonymousObjectToDictionary(object obj)
{
return TypeDescriptor.GetProperties(obj)
.OfType<PropertyDescriptor>()
.ToDictionary(
prop => prop.Name,
prop => prop.GetValue(obj)
);
}
Một advatages intersting thực hiện này là nó trả về một từ điển rỗng cho null
đối tượng.
Và đây là một phiên bản generic:
public static IDictionary<string,T> AnonymousObjectToDictionary<T>(
object obj, Func<object,T> valueSelect
)
{
return TypeDescriptor.GetProperties(obj)
.OfType<PropertyDescriptor>()
.ToDictionary<PropertyDescriptor,string,T>(
prop => prop.Name,
prop => valueSelect(prop.GetValue(obj))
);
}
Rất tương tự (với LINQ): [Một danh sách chung của lớp vô danh] (http://stackoverflow.com/questions/612689/a-generic-list- of-anonymous-class) – nawfal
.Chọn (...). AsEnumerable(). ToDictionary (k => k.id, v => v làm đối tượng) làm việc cho tôi. Biến của tôi là Từ điển –
Ravi
@Ravishankar: Bạn không cần 'AsEnumerable()' ở đây, có thể là nhất. Nó không thêm bất cứ điều gì trên đầu trang của 'Chọn()'. – abatishchev