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 }); }
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)); }
public static IntermediateField Set(this IntermediateField field, IntermediateFieldDefinition definition, IntermediateFieldPathValue value) { return(EnsureField(field, definition).Set(value)); }
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)); }
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 }); }