尝试将对象保存到独立存储区时,我遇到了一个奇怪的错误。我有一个有一些属性的类,这里是代码:
[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序列化的成员数 属性。
我不明白为什么序列化程序试图序列化我的模型的对象(这是不可序列化的)当我给它的类没有任何对这种类型的引用时......我错过了吗? - &GT;不,我不想将datacontract属性添加到我不需要的类,并且不打算序列化,所以请不要回答:)
答案 0 :(得分:1)
如果您在http://msdn.microsoft.com/en-us/library/hh394007(v=VS.92).aspx
中完成“演练:使用MVVM for Windows Phone消费OData”中的参考过程,则可能会遇到此问题当你到达你打电话的地方时:
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属性,问题就消失了!
答案 1 :(得分:0)
在我看来,您尝试使用XmlIgnore
从序列化中排除属性。
您可以使用IgnoreDataMemberAttribute从序列化中选择退出成员。
因此,请尝试使用IgnoreDataMemberAttribute
而不是XmlIgnore
来禁止成员进行序列化。
我也遇到了DataContract
在与你完全相同的情况下遇到的麻烦,因此我将原来的旧XML序列化转换为字符串,然后将其存储在独立存储中。这也简化了调试。
答案 2 :(得分:0)
我不认为这是一个正确的答案,但这是我必须做的才能解决它。 在更改了一些代码之后,我意识到如果我没有将任何东西保存到隔离存储器中,那就失败了。只是在类型上声明DataContract属性就会出错。我必须认为WP7的框架在某种程度上是在解析所有具有这个属性的类,并且由于一些奇怪和模糊的原因(我找不到),它也在其他类中寻找它们。我在框架所抱怨的类中添加了DataContract属性,并且还添加了一些KnownType属性,并且一切都开始顺利运行......奇怪怪异......如果有人可以对此有所了解,我会快乐(当我解决问题但不知道确切的原因时,我讨厌它)