2015-10-06 8 views
3
public class Generic 
{ 
    public object AnonObject {get;set;} 
    public string ObjectType {get;set;} 
} 


public class TypedObject 
{ 
    public string Name {get;set;} 
} 

Есть ли способ преобразования анонимного свойства AnonObject в классе [Generic] на [TypedObject] с помощью ServiceStack serialization или другой библиотеки.Преобразования общих объектов для типизированных объектов

например. В идеале, я ищу способ

TypedObject typed = generic.AnonObject.ConvertTo<TypedObject>(); 

или

TypedObject typed = generic.AnonObject As TypedOject; 

ответ

1

Вы можете использовать до сих пор используют ServiceStack-х built-in Auto Mapping конвертировать между анонимным и напечатал объекты, но они по-прежнему должны иметь одинаковую форму, например:

public class Poco 
{ 
    public int Id { get; set; } 
    public string Name { get; set; }   
} 

var anon = new { Id = 1, Title = "Foo" }; 
var dto = anon.ConvertTo<Poco>(); 

dto.PrintDump(); 

который печатает населенную DTO:

{ 
    Id: 1, 
    Title: Foo 
} 

Методы расширения ToObjectDictionary и FromObjectDictionary также полезны при попытке преобразования слабо типизированных структур данных в типизированный POCO «S, например:

var dto = new User 
{ 
    FirstName = "First", 
    LastName = "Last", 
    Car = new Car { Age = 10, Name = "ZCar" }, 
}; 

Dictionary<string,object> map = dtoUser.ToObjectDictionary(); 

User user = (User)map.FromObjectDictionary(typeof(User)); 

Если вышеперечисленные варианты не хватает еще один потенциальный решение для сериализации/десериализации объекта как JSON, например:

var json = new { Id = 1, Title = "Foo" }.ToJson(); 
var dto = json.FromJson<Poco>(); 
+0

Спасибо, FromObjectDictionary и ToObjectDictionary работал меня. Не знаю, почему другие не работали. –

2

вы пробовали built-in Auto-Mapping методы ServiceStack в?

TypedObject typed = generic.AnonObject.To<TypedObject>(); 

TypedObject typed = generic.AnonObject.TranslateTo<TypedObject>(); 

TypedObject typed = generic.AnonObject.ConvertTo<TypedObject>(); 

TypedObject typed = new TypedObject(); 
typed.PopulateWith(generic.AnonObject); 
Смежные вопросы