【问题标题】:"The resource MultipleIdDefinition was not found" on deserialization on Windows Phone 7Windows Phone 7 上的反序列化“找不到资源 MultipleIdDefinition”
【发布时间】:2011-02-19 03:59:03
【问题描述】:

我突然开始从我的 Windows Phone 7 应用程序中得到这个。我不知道我反序列化的数据发生了什么变化会导致这种情况。知道这意味着什么吗?

System.Runtime.Serialization.SerializationException occurred
  Message=The resource MultipleIdDefinition was not found in System.Runtime.Serialization
  StackTrace:
       at System.Runtime.Serialization.ReferencedObjectCache.Add(String id, Object referencedObject)
       at System.Runtime.Serialization.XmlObjectSerializerReadContext.AddNewObjectWithId(String id, Object obj, Boolean isReference)
       at System.Runtime.Serialization.XmlObjectSerializerReadContext.AddNewObject(Object obj, Boolean isReference)
       at System.Runtime.Serialization.XmlFormatReader.InvokeBeforeDeserialization(ClassDataContract classContract, XmlObjectSerializerReadContext context)
       at System.Runtime.Serialization.XmlFormatReader.InitializeCallStack(DataContract clContract, XmlReaderDelegator xmlReaderDelegator, XmlObjectSerializerReadContext xmlObjContext, XmlDictionaryString[] memberNamesColl, XmlDictionaryString[] memberNamespacesColl)
       at System.Runtime.Serialization.ClassDataContract.ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context)
       at System.Runtime.Serialization.XmlObjectSerializerReadContext.ReadDataContractValue(DataContract dataContract, XmlReaderDelegator reader)
       at System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator reader, String name, String ns, DataContract& dataContract)
       at System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator xmlReader, Int32 id, RuntimeTypeHandle declaredTypeHandle, String name, String ns)
       at System.Runtime.Serialization.XmlFormatReader.InternalDeserialize(Object value, Type type, String name, String ns, XmlObjectSerializerReadContext context, XmlReaderDelegator xmlReader)
       at System.Runtime.Serialization.XmlFormatReader.ReadValue(Type type, String name, String ns, XmlObjectSerializerReadContext context, XmlReaderDelegator xmlReader)
       at System.Runtime.Serialization.XmlFormatReader.ReadCollectionItem(CollectionDataContract collectionContract, Type itemType, String itemName, String itemNs, XmlObjectSerializerReadContext context, XmlReaderDelegator xmlReader)
       at System.Runtime.Serialization.XmlFormatReader.ReadCollectionItems(DeserializedObject desObj, CollectionDataContract collectionContract, Int32 membersRead, Int32 size)
       at System.Runtime.Serialization.XmlFormatReader.ReadCollection(DeserializedObject desObj, CollectionDataContract collectionContract, Int32 membersRead)
       at System.Runtime.Serialization.XmlFormatReader.Deserialize(XmlObjectSerializerReadContext context)
       at System.Runtime.Serialization.XmlFormatReader.InitializeCallStack(DataContract clContract, XmlReaderDelegator xmlReaderDelegator, XmlObjectSerializerReadContext xmlObjContext, XmlDictionaryString[] memberNamesColl, XmlDictionaryString[] memberNamespacesColl)
       at System.Runtime.Serialization.ClassDataContract.ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context)
       at System.Runtime.Serialization.XmlObjectSerializerReadContext.ReadDataContractValue(DataContract dataContract, XmlReaderDelegator reader)
       at System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator reader, String name, String ns, DataContract& dataContract)
       at System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator xmlReader, Type declaredType, DataContract dataContract, String name, String ns)
       at System.Runtime.Serialization.DataContractSerializer.InternalReadObject(XmlReaderDelegator xmlReader, Boolean verifyObjectName)
       at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName)
       at System.Runtime.Serialization.XmlObjectSerializer.ReadObject(XmlDictionaryReader reader)
       at ...
       at Microsoft.Phone.Shell.PhoneApplicationService.FireLaunching()
       at Microsoft.Phone.Execution.NativeEmInterop.FireOnLaunching()

【问题讨论】:

  • 您能否展示一些 json(以及它反序列化的对象)的示例来演示此问题。

标签: silverlight windows-phone-7 datacontractserializer


【解决方案1】:

如果您没有故意反序列化任何 XML,那么我只能 猜测

  • 应用的隔离存储包含一些应用状态 XML(例如来自 AppSettings)
  • 或者您的应用的配置 XML 存在问题

要尝试解决此问题,您可以:

  1. 查看项目的 Properties 文件夹 - 那里的 XML 配置文件是否正常?如果您在编辑器中打开它们,是否会显示任何警告或错误?
  2. 从模拟器和/或手机中卸载应用(您甚至可以尝试重新启动模拟器或将手机恢复出厂设置)

如果没有,请发布更多信息,我们会尽力帮助解决更多有趣的问题!

【讨论】:

    【解决方案2】:

    如果您使用 WCF,这可能是由于在服务器端添加了 DataContract 的“IsReference=true”。 在实际的有效载荷中,它会像 z:Id=”i7” 这样明显。

    如果您有两个版本(一个工作,一个不工作),我建议您尽可能深入地调试,以便您可以清楚地看到您反序列化的内容,然后对两个版本进行文本比较。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多