![](/img/trans.png)
[英]InvalidDataContractException with IsolatedStorageSettings on WP7
[英]InvalidDataContractException on WP7 application on class that is serializable
尝试将对象保存到隔离存储中时出现一个奇怪的错误。 我有一个具有一些属性的类,这是代码:
[DataContract]
public class ExerciseStatistic
{
[XmlIgnore]
public int CorrectAnswers
{
get
{
return Attempts.Where(a => a.AttemptAnswerIsCorrect).Count();
}
}
[XmlIgnore]
public int IncorrectAnswers
{
get
{
return Attempts.Where(a => !a.AttemptAnswerIsCorrect).Count();
}
}
[XmlIgnore]
public int AnswerAttempts
{
get { return Attempts.Count; }
}
public List<AnswerAttempt> Attempts { get; set; }
public ExerciseStatistic()
{
Attempts = new List<AnswerAttempt>();
}
}
public class AnswerAttempt
{
public DateTime AttemptDate { get; set; }
public string AttemptTargetName { get; set; }
public string AttemptName { get; set; }
public bool AttemptAnswerIsCorrect { get; set; }
}
但是,当尝试使用此语句保存它时:
IsolatedStorageSettings.ApplicationSettings["a"] = new ExerciseStatistic()
{
Attempts = new List<AnswerAttempt>()
{
new AnswerAttempt()
{
AttemptAnswerIsCorrect = true,
AttemptDate = DateTime.Now,
AttemptName = "lala",
AttemptTargetName = "lala2"
},
new AnswerAttempt()
{
AttemptAnswerIsCorrect = false,
AttemptDate = DateTime.Now,
AttemptName = "lalab",
AttemptTargetName = "lalab2"
}
}
};
我遇到了这样的异常(我用假名更改了代码的签名,但在示例中,它达到了目的):
类型'XX.Model.FirstClass.SecondClass'无法序列化。 考虑使用DataContractAttribute属性标记它,并使用DataMemberAttribute属性标记要序列化的所有成员。
我不明白为什么当我给它的类没有对该类型的任何引用时,序列化程序为何试图对我的模型对象(不可序列化)进行序列化...我缺少什么? ->不,我不想将datacontract属性添加到我不需要的类中,也不想计划进行序列化,所以请不要回答这个问题:)
如果您通过http://msdn.microsoft.com/zh-cn/library/hh394007(v=VS.92)中的“演练:使用MVVM for Windows Phone使用OData”中的参考过程进行操作,则可能会遇到此问题。 aspx
当您到达要点时:
Return DataServiceState.Serialize(_context, collections);
您可能会收到一条InvalidDataContractException消息:
类型'DataBoundApp1.Northwind.NorthwindEntities'无法序列化。 考虑使用DataContractAttribute属性标记它,并使用DataMemberAttribute属性标记要序列化的所有成员。
感谢Daniel Perez的回答,我得以解决此问题,并且正在记录我的步骤以为其他人阐明解决方案:
。
namespace OCC.WindowsPhone.OrlandoCodeCampService
{
[DataContract] <--- I ADDED THIS
public partial class OrlandoCodeCampEntities : global::System.Data.Services.Client.DataServiceContext
{..}
添加DataContract属性后,问题就消失了!
在我看来,您尝试使用XmlIgnore
从序列化中排除属性。
从文档中 :
您可以使用IgnoreDataMemberAttribute从序列化中退出成员。
因此请尝试使用IgnoreDataMemberAttribute
而不是XmlIgnore
从序列化中退出成员。
在与您相同的情况下,我也遇到了DataContract
麻烦,因此我恢复了将普通的XML序列化为字符串,然后将其存储在隔离的存储中。 这也简化了调试。
我认为这不是一个正确的答案,但这是我必须解决的问题。 更改了一些代码后,我意识到即使我没有将任何内容保存到隔离存储中,这也将失败。 只需在类型上声明DataContract属性,就会产生错误。 我必须认为WP7的框架有时会解析具有该属性的所有类,并且出于某些奇怪和晦涩的原因(我找不到),它也在其他类中也在寻找它们。 我在框架所涉及的类中添加了DataContract属性,还添加了一些KnownType属性,并且一切开始平稳运行...怪异的怪异...如果有人可以对此有所了解,我会快乐(当我解决问题但不知道确切原因时,我讨厌它)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.