示例#1
0
        internal static IntermediateFieldValue Deserialize(JsonObject jsonObject, Uri baseUri, IntermediateFieldType type)
        {
            var context = jsonObject.GetValueOrDefault <string>("context");

            if (!jsonObject.TryGetValue("data", out var data))
            {
                throw new ArgumentException();
            }

            var value = data;

            if (data is string)
            {
            }
            else if (data is long)
            {
                if (type == IntermediateFieldType.Number)
                {
                    value = Convert.ToInt32(data);
                }
            }
            else if (data is JsonObject jsonData)
            {
                jsonData.TryGetValue("embeddedIndex", out var embeddedIndex);

                value = new IntermediateFieldPathValue
                {
                    BaseUri           = (embeddedIndex == null) ? null : baseUri,
                    EmbeddedFileIndex = (embeddedIndex == null) ? null : (int?)Convert.ToInt32(embeddedIndex),
                    Path = jsonData.GetValueOrDefault <string>("path"),
                };
            }

            var previousValueJson = jsonObject.GetValueOrDefault <JsonObject>("prev");
            var previousValue     = (previousValueJson == null) ? null : IntermediateFieldValue.Deserialize(previousValueJson, baseUri, type);

            return(new IntermediateFieldValue
            {
                Context = context,
                Data = value,
                PreviousValue = previousValue
            });
        }
示例#2
0
        public static IntermediateField Set(this IntermediateField field, IntermediateFieldPathValue value)
        {
            object data;

            if (field == null)
            {
                throw new ArgumentNullException(nameof(field));
            }
            else if (value == null) // null is always allowed.
            {
                data = null;
            }
            else
            {
                switch (field.Type)
                {
                case IntermediateFieldType.Bool:
                    throw new ArgumentException($"Cannot convert path '{value.Path}' to a 'bool' field type.", nameof(value));

                case IntermediateFieldType.LargeNumber:
                    throw new ArgumentException($"Cannot convert path '{value.Path}' to a 'large number' field type.", nameof(value));

                case IntermediateFieldType.Number:
                    throw new ArgumentException($"Cannot convert path '{value.Path}' to a 'number' field type.", nameof(value));

                case IntermediateFieldType.Path:
                    data = value;
                    break;

                case IntermediateFieldType.String:
                    data = value.Path;
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}");
                }
                ;
            }

            return(AssignFieldValue(field, data));
        }
示例#3
0
 public static IntermediateField Set(this IntermediateField field, IntermediateFieldDefinition definition, IntermediateFieldPathValue value)
 {
     return(EnsureField(field, definition).Set(value));
 }
示例#4
0
        public static IntermediateField Set(this IntermediateField field, string value)
        {
            object data;

            if (field == null)
            {
                throw new ArgumentNullException(nameof(field));
            }
            else if (value == null) // Null is always allowed.
            {
                data = null;
            }
            else
            {
                switch (field.Type)
                {
                case IntermediateFieldType.Bool:
                    if (value.Equals("yes", StringComparison.OrdinalIgnoreCase) || value.Equals("true", StringComparison.OrdinalIgnoreCase))
                    {
                        data = true;
                    }
                    else if (value.Equals("no", StringComparison.OrdinalIgnoreCase) || value.Equals("false", StringComparison.OrdinalIgnoreCase))
                    {
                        data = false;
                    }
                    else
                    {
                        throw new ArgumentException($"Cannot convert string '{value}' to a 'bool' field type.", nameof(value));
                    }
                    break;

                case IntermediateFieldType.LargeNumber:
                    if (Int64.TryParse(value, out var largeNumber))
                    {
                        data = largeNumber;
                    }
                    else
                    {
                        throw new ArgumentException($"Cannot convert string '{value}' to a 'large number' field type.", nameof(value));
                    }
                    break;

                case IntermediateFieldType.Number:
                    if (Int32.TryParse(value, out var number))
                    {
                        data = number;
                    }
                    else
                    {
                        throw new ArgumentException($"Cannot convert string '{value}' to a 'number' field type.", nameof(value));
                    }
                    break;

                case IntermediateFieldType.Path:
                    data = new IntermediateFieldPathValue {
                        Path = value
                    };
                    break;

                case IntermediateFieldType.String:
                    data = value;
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}");
                }
                ;
            }

            return(AssignFieldValue(field, data));
        }
示例#5
0
        internal static IntermediateFieldValue Deserialize(JsonObject jsonObject, Uri baseUri, IntermediateFieldType type)
        {
            var context = jsonObject.GetValueOrDefault <string>("context");

            if (!jsonObject.TryGetValue("data", out var data))
            {
                throw new ArgumentException();
            }

            var value = data;

            switch (value)
            {
            case int intData:
                switch (type)
                {
                case IntermediateFieldType.Bool:
                    value = intData != 0;
                    break;

                case IntermediateFieldType.LargeNumber:
                    value = Convert.ToInt64(data);
                    break;

                case IntermediateFieldType.Path:
                case IntermediateFieldType.String:
                    value = intData.ToString();
                    break;
                }
                break;

            case long longData:
                switch (type)
                {
                case IntermediateFieldType.Bool:
                    value = longData != 0;
                    break;

                case IntermediateFieldType.Number:
                    value = Convert.ToInt32(longData);
                    break;

                case IntermediateFieldType.Path:
                case IntermediateFieldType.String:
                    value = longData.ToString();
                    break;
                }
                break;

            case JsonObject jsonData:
                jsonData.TryGetValue("embed", out var embed);

                value = new IntermediateFieldPathValue
                {
                    BaseUri = (embed != null) ? baseUri : null,
                    Embed   = embed != null,
                    Path    = jsonData.GetValueOrDefault <string>("path"),
                };
                break;

                // Nothing to do for this case, so leave it out.
                // case string stringData:
                //     break;
            }

            var previousValueJson = jsonObject.GetValueOrDefault <JsonObject>("prev");
            var previousValue     = (previousValueJson == null) ? null : IntermediateFieldValue.Deserialize(previousValueJson, baseUri, type);

            return(new IntermediateFieldValue
            {
                Context = context,
                Data = value,
                PreviousValue = previousValue
            });
        }