public void Deserialize(XmlAttribute xml) { var name = xml.Name; if (name[0] == '_') { Hash = int.Parse(name.Substring(1), NumberStyles.HexNumber); } else { // known attribute :) Name = name; } var type = AttributeTypes.GetType(Hash); // try resolving the full name, e.g. 'Class.bProperty' var fullHash = StringHasher.GetHash(FullName); if (fullHash != Hash) { if (AttributeTypes.IsTypeKnown(fullHash)) { type = AttributeTypes.GetType(fullHash); } } Data = new AttributeData(type, xml.Value); // looks to be part of the spec :/ //if (Data.Type != type) // Debug.WriteLine($"Attribute '{FullName}' was created as a '{type.ToString()}' but was actually a '{Data.Type.ToString()}'!"); }
public void Deserialize(BinaryStream stream, bool readHash) { if (readHash) { var hash = stream.ReadInt32(); var name = StringHasher.ResolveHash(hash); var type = AttributeTypes.GetType(hash); // cannot be null or contain spaces var nameResolved = ((name != null) && !name.Contains(" ")); if (nameResolved) { Name = name; } else { Hash = hash; } // try resolving the full name, e.g. 'Class.bProperty' var fullHash = StringHasher.GetHash(FullName); if (fullHash != hash) { if (AttributeTypes.IsTypeKnown(fullHash)) { type = AttributeTypes.GetType(fullHash); } } Data = new AttributeData(type); } else { Deserialize(stream); } }