2011-10-18 62 views
1

我嘗試爲我的實體框架代碼第一類寫一個XML <> Object Mapper。由於EF不會在此刻支持這種自動XML序列化我這樣做是爲了訪問「檔案」對象屬性和操縱底層ProfileData字符串:C#對象引用應自動更改映射字段

[Column(TypeName = "xml")] 
public string ProfileData { get; set; } 

[NotMapped] 
public Profile Profile 
{ 
    get { return ProfileData.DeserializeXml<Profile>(); } 
    set { ProfileData = value.SerializeXml(); } 
} 

一切工作正常,但ProfileData.DeserializeXml()返回(中課程)一個新的對象,從ProfileData字符串序列化。我認爲擴展方法是不相關的我的問題,但我無論如何它張貼:

public static T DeserializeXml<T>(this string xml) where T : class, new() 
{ 
    if(string.IsNullOrWhiteSpace(xml)) return new T(); 
    var serializer = new XmlSerializer(typeof(T)); 
    using (var reader = new StringReader(xml)) 
    { 
     try { return (T)serializer.Deserialize(reader); } 
     catch { return null; } 
    } 
} 

當我想改變我的對象我這樣做:

var profile = myObject.Profile; 
profile.fooVar = "test"; 

但這不會影響我的myObject的直到我這樣做:

myObject.Profile = profile; 

我知道爲什麼,但我並不想這樣做,我想......我們可以說「直接引用」到底層ProfileData字符串我的對象包裝。

任何想法來存檔或不可能?

回答

1

爲什麼您的班級沒有保留對Profile對象的引用,而只是在請求時序列化或反序列化?換句話說,將其更改爲:

[Column(TypeName = "xml")] 
public string ProfileData 
{ 
    get { return Profile.SerializeXml(); } 
    set { Profile = value.DeserializeXml<Profile>(); } 
} 

[NotMapped] 
public Profile Profile { get; set; } 
+0

這就是**完全**我想要的,但某種程度上沒有看到。非常感謝! – Marc