我将 Google API 中的 GData“Event”对象存储在数据表中(好吧,我必须将它们转换为对象,否则它们不会进入),并且我可以完美访问事件的所有属性,并使用它们来更新 Google,但我无法将数据表(或父数据集)序列化为文件,因为:
类型“Google.GData.Calendar.EventEntry、Google.GData.Calendar、Version=1.4.0.2、Culture=neutral、PublicKeyToken=aa6748391206b888”未实现 IXmlSerialized 接口(interface),因此无法继续进行序列化。
无论我尝试简单地序列化为 XML 还是二进制,都会发生这种情况,而且我找不到解决该问题的方法;任何数据结构都不能以某种方式保存到文件中吗?
为了设置上下文,我最初将 GData EventFeed 保存为 XML,这花了大约 30 秒才使用 Google API 的 myEventFeed.saveToXML 弄清楚,我想稍后重新加载它......我花了两天时间尝试将 xml 返回到 EventFeed 对象中,现在已切换到将 EventEntry 从 EventFeed 保存到数据表中。
所以我设法轻松地将 Feed 保存到 XML 1.0,但是将其读回到 GData EventFeed 中则是另一回事 - Google 为您提供了 myFeed.saveToXML 但没有 loadfromXML 方法:-/所以我最终尝试添加 System. Runtime.Serialization 使用类似的东西:
暗淡阅读器 As XmlReader = XmlReader.Create(fileName) 昏暗的 rssFeed As SyndicateFeed = SyndicateFeed.Load(reader)
一开始这看起来很有希望,但数据并不全部在 rssFeed 中,而且在调用我需要的方法之前,我仍然必须将数据放回到 Google.GData.Calendar.EventFeed 中,并且我也不知道该怎么做。我想可以将最重要的数据从 rssFeed 复制到新的 EventEntry 中,或者通过提取重要数据对数据表执行相同的操作...但这将非常不雅观,并且有风险。
有什么想法我现在应该转向哪个方向吗?我是不是找错了树?
谢谢, 尼尔
VB.NET 3.5 VS 2008
最佳答案
如果您有一个不想序列化的对象,则无法使其序列化。
这意味着您需要创建一个想要序列化的对象。创建一个 XML-Serialized 类,它将充当实际类的代理。您的代理将有一个可序列化的属性,与您希望序列化的原始类的每个属性相对应:
public class Original
{
private string _property1;
private int _property2;
public string Property1
{
get { return _property1; }
}
public int Property2
{
get { return _property2; }
}
}
public class ProxyToOriginal
{
private readonly Original _original;
public ProxyToOriginal(Original original)
{
_original = original;
}
public string Property1
{
get { return _original.Property1; }
set { }
}
public int Property2
{
get { return _original.Property2; }
set { }
}
}
关于serialization - 如果数据表包含拒绝序列化的对象,如何保存数据表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2352137/