我尝试为我的Entity Framework Code First类编写XML<> Object Mapper。因为EF目前不支持这种自动XML序列化,所以我这样做是为了访问“Profile”对象属性并操纵底层的ProfileData字符串:
[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字符串说“直接引用”。
有任何想法存档或不可能吗?
答案 0 :(得分:1)
为什么您的类不会引用Profile
对象的引用,而只是在请求时序列化或反序列化?换句话说,将其更改为:
[Column(TypeName = "xml")]
public string ProfileData
{
get { return Profile.SerializeXml(); }
set { Profile = value.DeserializeXml<Profile>(); }
}
[NotMapped]
public Profile Profile { get; set; }