-
- namespace Test
- {
- using Newtonsoft.Json;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using Microshaoft;
- using Newtonsoft.Json.Linq;
- class Program
- {
- static void Main(string[] args)
- {
- string json = @"
- { a: [{a:'asdasd',b:2222},{a:'@a.[2].a'},{a:'ssss'}]}
- ";
- string json2 = @"
- {a:['asdasd','aaaa',{a:1111}]}
- ";
- Console.WriteLine
- (
- JsonHelper
- .MergeJsonTemplate
- (
- json
- , json2
- )
- );
- Console.ReadLine();
- }
- static void Main2(string[] args)
- {
- string json = @"{ 'name10':
- 'Admin' }
- [{ 'name9': 'Publisher' }][
- { 'name4': 'Admin' },{ 'name8': ['Admin'] }]{ 'name7':
- 'Admin' }
- [{ 'name3': ['Publisher','Publisher'] }]{ 'name5':
- 'Admin' }
- [{ 'name2': 'Publisher' }]{ 'name6':
- 'Admin' }
- [{ 'name1': 'Publisher' }]";
- JsonTextReader reader = new JsonTextReader(new StringReader(json));
- var r = reader.ReadAllMultipleContentsAsEnumerable<JObject>().ToArray();
- reader = new JsonTextReader(new StringReader(json));
- r = reader
- .ReadMultipleContentsAsEnumerable<JObject>(3)
- .SelectMany
- (
- (x) =>
- {
- return x;
- }
- ).ToArray();
- Console.ReadLine();
- }
- static void Main1(string[] args)
- {
- string json = @"{ 'name':
- 'Admin',c:1111111 }
- [{ 'name': 'Publisher' }][
- { 'name': 'Admin' },{ 'name': 'Admin' }]{ 'name':
- 'Admin' }
- [{ 'name': 'Publisher' }]{ 'name':
- 'Admin' }
- [{ 'name': 'Publisher' }]{ 'name':
- 'Admin' }
- [{ 'name': 'Publisher' }]";
- IList<Role> roles = new List<Role>();
- JsonTextReader reader = new JsonTextReader(new StringReader(json));
- var r = reader.ReadAllMultipleContentsAsEnumerable<Role>().ToArray();
- reader = new JsonTextReader(new StringReader(json));
- r = reader
- .ReadMultipleContentsAsEnumerable<Role>(3)
- .SelectMany
- (
- (x) =>
- {
- return x;
- }
- ).ToArray();
- Console.ReadLine();
- }
- }
- public class Role
- {
- public string Name { get; set; }
- }
- }
- namespace Microshaoft
- {
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- using System;
- using System.IO;
- using System.Linq;
- using System.Xml.Linq;
- using System.Collections.Generic;
- public static class JsonHelper
- {
- public static JToken MergeJsonTemplateToJToken
- (
- string jsonTemplate
- , string jsonData
- , string jsonTemplatePathPrefix = "@"
- )
- {
- var jTokenTemplate = JToken.Parse(jsonTemplate);
- var jTokenData = JToken.Parse(jsonData);
- JsonReaderHelper
- .ReadAllPaths
- (
- jsonTemplate
- , (isJArray, jsonPath, valueObject, valueType, reader) =>
- {
- var vs = valueObject as string;
- if (vs != null)
- {
- vs = vs.Trim();
- if (vs.StartsWith(jsonTemplatePathPrefix))
- {
- var replacedSelectToken = jTokenTemplate.SelectToken(jsonPath);
- var trimChars = jsonTemplatePathPrefix.ToCharArray();
- vs = vs.TrimStart(trimChars);
- var replacementSelectToken = jTokenData.SelectToken(vs);
- replacedSelectToken.Replace(replacementSelectToken);
- }
- }
- return false;
- }
- );
- return jTokenTemplate;
- }
- public static string MergeJsonTemplate
- (
- string jsonTemplate
- , string jsonData
- , string jsonTemplatePathPrefix = "@"
- )
- {
- return
- MergeJsonTemplateToJToken
- (
- jsonTemplate
- , jsonData
- , jsonTemplatePathPrefix
- )
- .ToString();
- }
- public static string XmlToJson
- (
- string xml
- , Newtonsoft
- .Json
- .Formatting formatting
- = Newtonsoft
- .Json
- .Formatting
- .Indented
- , bool needKeyQuote = false
- )
- {
- XNode xElement;
- xElement = XElement.Parse(xml).Elements().First();
- string json = string.Empty;
- using (var stringWriter = new StringWriter())
- {
- using (var jsonTextWriter = new JsonTextWriter(stringWriter))
- {
- jsonTextWriter.Formatting = formatting;
- jsonTextWriter.QuoteName = needKeyQuote;
- var jsonSerializer = new JsonSerializer();
- jsonSerializer.Serialize(jsonTextWriter, xElement);
- json = stringWriter.ToString();
- }
- }
- return json;
- }
- public static string JsonToXml
- (
- string json
- , bool needRoot = false
- , string defaultDeserializeRootElementName = "root"
- )
- {
- if (needRoot)
- {
- json = string.Format
- (
- @"{{ {1}{0}{2} }}"
- , " : "
- , defaultDeserializeRootElementName
- , json
- );
- }
- //XmlDocument xmlDocument = JsonConvert.DeserializeXmlNode(json, defaultDeserializeRootElementName);
- var xDocument = JsonConvert
- .DeserializeXNode
- (
- json
- , defaultDeserializeRootElementName
- );
- var xml = xDocument
- .Elements()
- .First()
- .ToString();
- return xml;
- }
- public static T DeserializeByJTokenPath<T>
- (
- string json
- , string jTokenPath = null //string.Empty
- )
- {
- var jObject = JObject.Parse(json);
- var jsonSerializer = new JsonSerializer();
- if (string.IsNullOrEmpty(jTokenPath))
- {
- jTokenPath = string.Empty;
- }
- var jToken = jObject.SelectToken(jTokenPath);
- using (var jsonReader = jToken.CreateReader())
- {
- return
- jsonSerializer
- .Deserialize<T>(jsonReader);
- }
- }
- public static string Serialize
- (
- object target
- , bool formattingIndented = false
- , bool keyQuoteName = false
- )
- {
- string json = string.Empty;
- using (StringWriter stringWriter = new StringWriter())
- {
- using (var jsonTextWriter = new JsonTextWriter(stringWriter))
- {
- jsonTextWriter.QuoteName = keyQuoteName;
- jsonTextWriter.Formatting = (formattingIndented ? Formatting.Indented : Formatting.None);
- var jsonSerializer = new JsonSerializer();
- jsonSerializer.Serialize(jsonTextWriter, target);
- json = stringWriter.ToString();
- }
- }
- return json;
- }
- public static void ReadJsonPathsValuesAsStrings
- (
- string json
- , string[] jsonPaths
- , Func<string, string, bool> onReadedOncePathStringValueProcesssFunc = null
- )
- {
- using (var stringReader = new StringReader(json))
- {
- using (var jsonReader = new JsonTextReader(stringReader))
- {
- bool breakAndReturn = false;
- while
- (
- jsonReader.Read()
- &&
- !breakAndReturn
- )
- {
- foreach (var x in jsonPaths)
- {
- if (x == jsonReader.Path)
- {
- if (onReadedOncePathStringValueProcesssFunc != null)
- {
- var s = jsonReader.ReadAsString();
- breakAndReturn
- = onReadedOncePathStringValueProcesssFunc
- (
- x
- , s
- );
- if (breakAndReturn)
- {
- break;
- }
- }
- }
- }
- }
- }
- }
- }
- public static IEnumerable<TElement>
- DeserializeToFromDictionary<TKey, TValue, TElement>
- (
- string json
- , Func<TKey, TValue, TElement> OnOneElementProcessFunc
- )
- {
- //IEnumerable<TElement> r = default(IEnumerable<TElement>);
- return
- DeserializeByJTokenPath<Dictionary<TKey, TValue>>(json)
- .Select
- (
- (x) =>
- {
- var rr = OnOneElementProcessFunc(x.Key, x.Value);
- return rr;
- }
- );
- //return r;
- }
- }
- }
- namespace Microshaoft
- {
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- using System.Collections.Generic;
- using System;
- using System.IO;
- public static class JsonReaderHelper
- {
- public static void ReadAllPaths
- (
- string json
- , Func<bool, string, object, Type, JsonReader, bool> onReadPathOnceProcessFunc
- )
- {
- using (JsonReader reader = new JsonTextReader(new StringReader(json)))
- {
- var isStarted = false;
- var isJArray = false;
- while (reader.Read())
- {
- JsonToken tokenType = reader.TokenType;
- if (!isStarted)
- {
- if (tokenType == JsonToken.StartArray)
- {
- isJArray = true;
- isStarted = true;
- }
- else if (tokenType == JsonToken.StartArray)
- {
- isStarted = true;
- }
- else if (tokenType == JsonToken.StartConstructor)
- {
- isStarted = true;
- }
- }
- if
- (
- tokenType != JsonToken.Comment
- &&
- tokenType != JsonToken.PropertyName
- )
- {
- var jsonPath = reader.Path;
- if (!string.IsNullOrEmpty(jsonPath))
- {
- var valueType = reader.ValueType;
- var valueObject = reader.Value;
- if (valueType != null)
- {
- var r = onReadPathOnceProcessFunc
- (
- isJArray
- , jsonPath
- , valueObject
- , valueType
- , reader
- );
- if (r)
- {
- break;
- }
- }
- }
- }
- }
- reader.Close();
- }
- }
- public static void ReadAllMultipleContents
- (
- this JsonReader target
- )
- {
- if (!target.SupportMultipleContent)
- {
- target.SupportMultipleContent = true;
- }
- var serializer = new JsonSerializer();
- //serializer.CheckAdditionalContent
- while (target.Read())
- {
- Console.WriteLine(target.TokenType);
- var r = serializer.Deserialize(target);
- Console.WriteLine(r.GetType());
- Console.WriteLine(r.ToString());
- }
- }
- public static IEnumerable<JToken> ReadMultipleContents
- (
- this JsonReader target
- )
- {
- if (!target.SupportMultipleContent)
- {
- target.SupportMultipleContent = true;
- }
- var serializer = new JsonSerializer();
- while (target.Read())
- {
- if (target.TokenType == JsonToken.StartObject)
- {
- JToken entry = serializer.Deserialize<JToken>(target);
- yield return entry;
- }
- else if (target.TokenType == JsonToken.StartArray)
- {
- JArray entries = serializer.Deserialize<JArray>(target);
- foreach (var entry in entries)
- {
- if (entry is JArray)
- {
- //Console.WriteLine();
- }
- yield return (JToken)entry;
- }
- }
- }
- }
- public static IEnumerable<IEnumerable<T>> ReadMultipleContentsAsEnumerable<T>
- (
- this JsonReader target
- , int pageSize = 10
- )
- {
- if (!target.SupportMultipleContent)
- {
- target.SupportMultipleContent = true;
- }
- var serializer = new JsonSerializer();
- var list = new List<T>();
- var i = 0;
- while (target.Read())
- {
- if (target.TokenType == JsonToken.StartArray)
- {
- var entries = serializer.Deserialize<T[]>(target);
- foreach (var entry in entries)
- {
- if (i < pageSize)
- {
- i++;
- list.Add(entry);
- }
- if (i >= pageSize)
- {
- yield return list;
- list.Clear();
- i = 0;
- }
- }
- }
- else
- {
- var entry = serializer.Deserialize<T>(target);
- if (i < pageSize)
- {
- i++;
- list.Add(entry);
- }
- if (i >= pageSize)
- {
- yield return list;
- list.Clear();
- i = 0;
- }
- }
- }
- if (i > 0)
- {
- yield return list;
- list.Clear();
- i = 0;
- list = null;
- }
- }
- public static IEnumerable<T> ReadAllMultipleContentsAsEnumerable<T>(this JsonReader target)
- {
- if (!target.SupportMultipleContent)
- {
- target.SupportMultipleContent = true;
- }
- var serializer = new JsonSerializer();
- while (target.Read())
- {
- if (target.TokenType == JsonToken.StartArray)
- {
- var entries = serializer.Deserialize<T[]>(target);
- foreach (var entry in entries)
- {
- yield return entry;
- }
- }
- else
- {
- var entry = serializer.Deserialize<T>(target);
- yield return entry;
- }
- }
- }
- }
- }
|