コード例 #1
0
        public void WriteJson(JsonObjectElement rootElement, string filePath)
        {
            var rootObj = new JObject();

            rootElement.Children.ForEach(child => AppendRecursive(rootObj, child));
            _fileSystem.File.WriteAllText(filePath, rootObj.ToString());
        }
コード例 #2
0
        private static JsonObjectElement AlignObjectStructure(JsonObjectElement element, IReadOnlyCollection <string> missingKeyParts)
        {
            foreach (var keyPart in missingKeyParts)
            {
                element = element.AddObjectElement(keyPart);
            }

            return(element);
        }
コード例 #3
0
        public IReadOnlyCollection <TranslationElement> CreateElementsToTranslate(
            JsonObjectElement source,
            JsonObjectElement target)
        {
            var sourceValueElements = source.GetFlatValueElements();
            var targetValueElements = target.GetFlatValueElements();

            var missingElements = sourceValueElements.Except(targetValueElements).ToList();
            var result          = missingElements.Select(f => new TranslationElement(f.Key, f.Value.ToString())).ToList();

            return(result);
        }
コード例 #4
0
 private void CreateRecursive(JObject jobj, JsonObjectElement objectElement)
 {
     foreach (var property in jobj.Properties())
     {
         if (property.Value.Type == JTokenType.Object)
         {
             var newObjectElement = objectElement.AddObjectElement(property.Name);
             CreateRecursive((JObject)property.Value, newObjectElement);
         }
         else
         {
             objectElement.AddValueElement(property.Name, property.Value);
         }
     }
 }
コード例 #5
0
        public JsonObjectElement Parse(string filePath)
        {
            var rootObjectElement = new JsonObjectElement(string.Empty, null);

            if (!_fileSystem.File.Exists(filePath))
            {
                return(rootObjectElement);
            }

            var jsonText = _fileSystem.File.ReadAllText(filePath);

            if (string.IsNullOrEmpty(jsonText))
            {
                return(rootObjectElement);
            }

            var jObject = JObject.Parse(jsonText);

            CreateRecursive(jObject, rootObjectElement);
            return(rootObjectElement);
        }
コード例 #6
0
        private static void AlignKeyValue(JsonObjectElement root, TranslationElement element)
        {
            var jsonKey = JsonKey.Create(element.Key);

            var depeestElementResult = root.Children
                                       .Select(f => f.FindDeepestElement(jsonKey.FullKey))
                                       .FirstOrDefault(f => f.IsSuccess)?.Value ?? root;

            if (depeestElementResult is JsonObjectElement objectElement)
            {
                var missingKeyParts = jsonKey.FetchMissingObjectElementKeyParts(objectElement.Key);
                objectElement = AlignObjectStructure(objectElement, missingKeyParts);
                objectElement.AddValueElement(jsonKey.ValueElementKey, element.Value);
            }
            else
            {
                var valueElement = depeestElementResult as JsonValueElement;
                if (valueElement != null)
                {
                    valueElement.ReplaceValue(element.Value);
                }
            }
        }
コード例 #7
0
 public void AlignRootElement(JsonObjectElement root, IReadOnlyCollection <TranslationElement> elements)
 {
     elements.ForEach(f => AlignKeyValue(root, f));
 }