мне удалось получить его работу на много проб и ошибок. Очевидно, что все было построено и протестировано в режиме отладки, поэтому был список объектов, которые были сериализованы, что не удалось создать сборку с SerializationCodeIsMissingForType.
Чтобы помочь другим (так как примеров еще не так много), это было мое путешествие.
Мой сериализации код следующим образом:
persistantData = new Dictionary<string, object>();
persistantData.Add(nameof(Version), Version);
persistantData.Add(nameof(FileVersion), FileVersion);
persistantData.Add(nameof(ScrollParameters), ScrollParameters);
persistantData.Add(nameof(DefaultCellBackgroundColour), DefaultCellBackgroundColour);
persistantData.Add(nameof(Columns), Columns);
persistantData.Add(nameof(Rows), Rows);
persistantData.Add(nameof(Cells), listOfCellData);
persistantData.Add(nameof(Filename), FileName);
private async Task SaveTheFileAsync(StorageFile file)
{
using (MemoryStream memoryStream = new MemoryStream())
{
var serializer = new DataContractSerializer(typeof(Dictionary<string, object>));
serializer.WriteObject(memoryStream, persistantData); //Failed here
... и т.д.
Сначала я закомментировать все .Add() S выше, за исключением первого. То же самое исключение SerializationCodeIsMissingForType произошло, пока я не добавил следующее в стандартный файл Default.rd.xml в свойствах моего проекта, чтобы определить словарь типа коллекции:
<Namespace Name="System.Collections.Generic">
<TypeInstantiation Name="Dictionary" Arguments="System.String, System.Object" Dynamic="Required All" />
</Namespace>
Добавление объекта Версии обратно необходимое это для добавления По умолчанию. rd.xml (версия имеет тип PackageVersion).
<Namespace Name="Windows.ApplicationModel">
<TypeInstantiation Name="PackageVersion" Arguments="System.UInt16, System.UInt16, System.UInt16, System.UInt16" Dynamic="Required All" DataContractSerializer="Required All" />
</Namespace>
Добавление FileVersion немедленно сработало, так как его тип - int. Аналогично ScrollParameters, поскольку это класс, содержащий два двойника и поплавок.
DefaultCellBackgroundColour необходимо это в Default.rd.xml:
<Namespace Name="Windows.UI">
<TypeInstantiation Name="Color" Arguments="System.Byte, System.Byte, System.Byte, System.Byte" Dynamic="Required All" DataContractSerializer="Required All"/>
</Namespace>
Столбцы, строки и ячейки, необходимые отдельные записи типа в Default.rd.xml:
<Type Name="Columns" Dynamic="Required All" DataContractSerializer="All" />
<Type Name="Rows" Dynamic="Required All" DataContractSerializer="All" />
<Type Name="CellData" Dynamic="Required All" DataContractSerializer="All" />
Но так как CellData был список сбор данных, которые необходимо добавить в System.Collections.Generic для имени пространства имен (после словаря) следующим образом:
<Namespace Name="System.Collections.Generic">
<TypeInstantiation Name="Dictionary" Arguments="System.String, System.Object" Dynamic="Required All" DataContractSerializer="Required All" />
<TypeInstantiation Name="List" Arguments="CellData" Dynamic="Required All" DataContractSerializer="All" />
</Namespace>
Также определение CellData содержит в основном строки, целые числа, логические и десятичные числа, но одно свойство определяется как TextAlignment. Последнему нужна была собственная запись в Default.rd.XML, как это:
<Namespace Name="Windows.UI.Xaml">
<TypeInstantiation Name="TextAlignment" Arguments="System.Enum" Dynamic="Required All" DataContractJsonSerializer="Required All"/>
</Namespace>
Наконец FileName (строка) не требуется никакой дополнительной записи Default.rd.xml и все это работало.
Благодаря rbr94 за помощь. Заголовок этого вопроса теперь вводит в заблуждение, поскольку определения массивов не требуются.
Моего полный файл Default.rd.xml ниже
Надеются, что это поможет кому-то, когда-нибудь ...
Роберт
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<!--
An Assembly element with Name="*Application*" applies to all assemblies in
the application package. The asterisks are not wildcards.
-->
<Assembly Name="*Application*" Dynamic="Required All" />
<!-- Add your application specific runtime directives here. -->
<!-- Make all members of a type visible to .NET Native -->
<Type Name="Columns" Dynamic="Required All" DataContractSerializer="All" />
<Type Name="Rows" Dynamic="Required All" DataContractSerializer="All" />
<Type Name="CellData" Dynamic="Required All" DataContractSerializer="All" />
<Namespace Name="System.Collections.Generic">
<TypeInstantiation Name="Dictionary" Arguments="System.String, System.Object" Dynamic="Required All" DataContractSerializer="Required All" />
<TypeInstantiation Name="List" Arguments="CellData" Dynamic="Required All" DataContractSerializer="All" />
</Namespace>
<Namespace Name="Windows.ApplicationModel">
<TypeInstantiation Name="PackageVersion" Arguments="System.UInt16, System.UInt16, System.UInt16, System.UInt16" Dynamic="Required All" DataContractSerializer="Required All" />
</Namespace>
<Namespace Name="Windows.UI">
<TypeInstantiation Name="Color" Arguments="System.Byte, System.Byte, System.Byte, System.Byte" Dynamic="Required All" DataContractSerializer="Required All"/>
</Namespace>
<Namespace Name="Windows.UI.Xaml">
<TypeInstantiation Name="TextAlignment" Arguments="System.Enum" Dynamic="Required All" DataContractJsonSerializer="Required All"/>
</Namespace>
</Application>
</Directives>
Вы можете добавить как 'Row' и класс' column' к вашему коду, пожалуйста? – rbr94