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


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

是否有轉換匿名財產AnonObject類中[通用]使用ServiceStack serialization或其他庫[TypedObject]的一種方式。轉換的通用對象類型的對象

例如理想情況下,我要尋找一個方法

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 
} 

ToObjectDictionaryFromObjectDictionary擴展方法在嘗試將鬆散類型的數據結構轉換爲類型化POCO時也很有用的,如:

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

你試過ServiceStack的built-in Auto-Mapping的方法呢?

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);