コード例 #1
0
ファイル: Metadata.cs プロジェクト: NateKeefe/Reflector
            public static SerializableMetadata MakeSerializable(Metadata m)
            {
                var sm = new SerializableMetadata();

                sm.Actions = m.Actions.Select(ConvertToConcrete).ToList();
                sm.Objects = m.Objects.Select(ConvertToConcrete).ToList();
                return(sm);
            }
コード例 #2
0
        /// <summary>
        /// Updates the <see cref="Metadata"/> from <paramref name="streamData"/>
        /// </summary>
        /// <param name="streamData"><see cref="Stream"/> containing serialized <see cref="SerializableMetadata"/>.</param>
        /// <param name="dataFormat"><see cref="SerializationFormat"/> in which the <see cref="SerializableMetadata"/> was serialized to <paramref name="streamData"/>.</param>
        public void UpdateMetadata(Stream streamData, SerializationFormat dataFormat)
        {
            // Deserialize serialized metadata.
            SerializableMetadata deserializedMetadata = Serialization.Deserialize <SerializableMetadata>(streamData, dataFormat);

            // Update metadata from the deserialized metadata.
            foreach (SerializableMetadataRecord deserializedMetadataRecord in deserializedMetadata.MetadataRecords)
            {
                m_metadata.Write(deserializedMetadataRecord.HistorianID, deserializedMetadataRecord.Deflate());
            }
            m_metadata.Save();
        }
コード例 #3
0
        public static void GenerateMigrationContentStruct(
            this StringBuilder source,
            Compilation compilation,
            string indent,
            SerializableMetadata migration,
            INamedTypeSymbol classSymbol
            )
        {
            source.AppendLine($"{indent}ref struct V{migration.Version}Content");
            source.AppendLine($"{indent}{{");
            var properties = migration.Properties ?? ImmutableArray <SerializableProperty> .Empty;

            foreach (var serializableProperty in properties)
            {
                var propertyType = serializableProperty.Type;
                var type         = compilation.GetTypeByMetadataName(propertyType)?.IsValueType == true ||
                                   SymbolMetadata.IsPrimitiveFromTypeDisplayString(propertyType) && propertyType != "bool"
                    ? $"{propertyType}{(serializableProperty.UsesSaveFlag == true ? "?" : "")}" : propertyType;

                source.AppendLine($"{indent}    internal readonly {type} {serializableProperty.Name};");
            }

            var innerIndent = $"{indent}        ";

            var usesSaveFlags = properties.Any(p => p.UsesSaveFlag == true);

            if (usesSaveFlags)
            {
                source.AppendLine();
                source.GenerateEnumStart(
                    $"V{migration.Version}SaveFlag",
                    $"{indent}    ",
                    true,
                    Accessibility.Private
                    );

                source.GenerateEnumValue(innerIndent, true, "None", -1);
                int index = 0;
                foreach (var property in properties)
                {
                    if (property.UsesSaveFlag == true)
                    {
                        source.GenerateEnumValue(innerIndent, true, property.Name, index++);
                    }
                }

                source.GenerateEnumEnd($"{indent}    ");
            }

            source.AppendLine($"{indent}    internal V{migration.Version}Content(IGenericReader reader, {classSymbol.ToDisplayString()} entity)");
            source.AppendLine($"{indent}    {{");

            if (usesSaveFlags)
            {
                source.AppendLine($"{innerIndent}var saveFlags = reader.ReadEnum<V{migration.Version}SaveFlag>();");
            }

            if (properties.Length > 0)
            {
                foreach (var property in properties)
                {
                    if (property.UsesSaveFlag == true)
                    {
                        source.AppendLine();
                        // Special case
                        if (property.Type == "bool")
                        {
                            source.AppendLine($"{innerIndent}{property.Name} = (saveFlags & V{migration.Version}SaveFlag.{property.Name}) != 0;");
                        }
                        else
                        {
                            source.AppendLine($"{innerIndent}if ((saveFlags & V{migration.Version}SaveFlag.{property.Name}) != 0)\n{innerIndent}{{");

                            SerializableMigrationRulesEngine.Rules[property.Rule].GenerateDeserializationMethod(
                                source,
                                $"{innerIndent}    ",
                                property,
                                "entity"
                                );

                            source.AppendLine($"{innerIndent}}}\n{innerIndent}else\n{innerIndent}{{");
                            source.AppendLine($"{innerIndent}    {property.Name} = default;");
                            source.AppendLine($"{innerIndent}}}");
                        }
                    }
                    else
                    {
                        SerializableMigrationRulesEngine.Rules[property.Rule].GenerateDeserializationMethod(
                            source,
                            innerIndent,
                            property,
                            "entity"
                            );
                    }
                }
            }

            source.AppendLine($"{indent}    }}");

            source.AppendLine($"{indent}}}");
        }
コード例 #4
0
ファイル: Metadata.cs プロジェクト: NateKeefe/Reflector
        public static string Serialize(Metadata m)
        {
            var serializable = SerializableMetadata.MakeSerializable(m);

            return(JsonConvert.SerializeObject(serializable));
        }
コード例 #5
0
 public SerializableCharacter(Character character)
 {
     Inventory = new SerializableInventory(character.Inventory);
     Equipment = new SerializableEquipment(character.Equipment);
     Metadata  = new SerializableMetadata(character.Metadata);
 }