/// <summary> /// Deserializes passed string to file. /// </summary> /// <param name="input"> /// String to be deserialized. /// </param> /// <param name="parent"> /// Parent <see cref="IEntity">entity</see> for file. /// </param> /// <param name="encoding"> /// Encoding used for deserialization of file name. /// Usually passed from parent <see cref="Hypermedia">hypermedia</see> where file resides during deserialization of parent hypermedia. /// </param> public static File DeserializeFromString(string input, IEntity parent, Encoding encoding) { string path = null; string name = null; string extension = null; FileAttributes?attributes = null; long lastModDateTime = 0; DateTime? lastModifiedDateTime = null; List <Block> blocks = new List <Block>(); bool isSingleBlock = false; ulong size = 0; string parent_path = null; string hash = null; DeserializationTools.CheckStringFormat(input, false); string blockList; int count; List <string> stringList; DeserializationTools.SplitStringForSystemEntity(input, _startOfBlockListDeclaration, _endOfBlockListDeclaration, 13, out count, out blockList, out stringList, true); DeserializationTools.ParseStartBaseSystemEntitySerializationString(stringList, encoding, out path, out name); extension = new string(stringList[2].Skip(19).TakeWhile(x => x != ',').ToArray()); attributes = FileAttributesDeserializer(new string(stringList[3].Skip(34).TakeWhile(x => x != ',').ToArray())); lastModDateTime = long.Parse(new string(stringList[4].Skip(41).TakeWhile(x => x != ',').ToArray())); lastModifiedDateTime = DateTimeOffset.FromUnixTimeSeconds(lastModDateTime).UtcDateTime; isSingleBlock = (new string(stringList[5].Skip(26).TakeWhile(x => x != ',').ToArray()) == "true") ? true : false; DeserializationTools.ParseEndBaseSerializationString(stringList, 6, out size, out parent_path, out hash); DeserializationTools.CheckParent(parent, parent_path, false); File file = new File { Path = path, Name = name, Extension = extension, Attributes = attributes, LastModifiedDateTime = lastModifiedDateTime, IsSingleBlock = isSingleBlock, Size = size, Parent = parent, Hash = hash }; if (count != 0) { blocks = BlocksListDeserializer(blockList, file, count); } file.Blocks = blocks; return(file); }
/// <summary> /// Deserializes passed string to directory. /// </summary> /// <param name="input"> /// String to be deserialized. /// </param> /// <param name="parent"> /// Parent <see cref="IEntity">entity</see> for directory. /// </param> /// <param name="encoding"> /// Encoding used for deserialization of directory name. /// Usually passed from parent <see cref="Hypermedia">hypermedia</see> where directory resides during deserialization of parent hypermedia. /// </param> public static Directory DeserializeFromString(string input, IEntity parent, Encoding encoding) { string path = null; string name = null; FileAttributes? attributes = null; long lastModDateTime = 0; DateTime? lastModifiedDateTime = null; List <ISystemEntity> entities = new List <ISystemEntity>(); ulong size = 0; string parent_path = null; string hash = null; DeserializationTools.CheckStringFormat(input, false); string entitiesList; int count; List <string> stringList; DeserializationTools.SplitStringForSystemEntity(input, _startOfSystemEntityListDeclaration, _endOfSystemEntityListDeclaration, 31, out count, out entitiesList, out stringList, false); DeserializationTools.ParseStartBaseSystemEntitySerializationString(stringList, encoding, out path, out name); attributes = FileAttributesDeserializer(new string(stringList[2].Skip(34).TakeWhile(x => x != ',').ToArray())); lastModDateTime = long.Parse(new string(stringList[3].Skip(41).TakeWhile(x => x != ',').ToArray())); lastModifiedDateTime = DateTimeOffset.FromUnixTimeSeconds(lastModDateTime).UtcDateTime; DeserializationTools.ParseEndBaseSerializationString(stringList, 4, out size, out parent_path, out hash); DeserializationTools.CheckParent(parent, parent_path, false); Directory directory = new Directory { Path = path, Name = name, Attributes = attributes, LastModifiedDateTime = lastModifiedDateTime, Size = size, Parent = parent, Hash = hash }; if (count != 0) { entities = SystemEntitiesListDeserializer(entitiesList, directory, count, encoding); } directory.Entities = entities; return(directory); }