コード例 #1
0
        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);
            }
コード例 #2
0
        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);
        }