public JFileFieldType MoveToNext() { switch (state) { case JReaderState.New: state = JReaderState.InProgress; break; case JReaderState.InProgress: break; case JReaderState.Finished: throw new Exception("The reader already finished reading the json object."); default: throw new Exception("Invalid reader state."); } try { bool success = MoveToNextProperty(); CurrentPropertyType = success ? JsonTextReader.Value switch { "n" => JFileFieldType.FileName, "s" => JFileFieldType.FileSize, "m" => JFileFieldType.LastModifiedTime, "h" => JFileFieldType.Hash, _ => throw new Exception("Invalid field in file object.") } : JFileFieldType.None; return(CurrentPropertyType); }
private static JFileFields ReadAllFieldsFrom(string json) { using StringReader stringReader = new StringReader(json); using JsonTextReader jsonTextReader = new JsonTextReader(stringReader); jsonTextReader.Read(); JFileFields fields = new JFileFields(); JFileReader jFileReader = new JFileReader(jsonTextReader); while (true) { JFileFieldType fieldType = jFileReader.MoveToNext(); if (fieldType == JFileFieldType.None) { break; } switch (fieldType) { case JFileFieldType.None: break; case JFileFieldType.FileName: fields.FileName = jFileReader.ReadName(); break; case JFileFieldType.FileSize: fields.FileSize = jFileReader.ReadSize(); break; case JFileFieldType.LastModifiedTime: fields.LastModifiedTime = jFileReader.ReadLastModifiedTime(); break; case JFileFieldType.Hash: fields.FileHash = jFileReader.ReadHash(); break; default: throw new ArgumentOutOfRangeException(); } } return(fields); }