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); }
/// <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(); }
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}}}"); }
public static string Serialize(Metadata m) { var serializable = SerializableMetadata.MakeSerializable(m); return(JsonConvert.SerializeObject(serializable)); }
public SerializableCharacter(Character character) { Inventory = new SerializableInventory(character.Inventory); Equipment = new SerializableEquipment(character.Equipment); Metadata = new SerializableMetadata(character.Metadata); }