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;
}
}
}
}
}

JsonHelper MergeJsonTemplate的更多相关文章

  1. JSON扩展类——JsonHelper

    1.引用Newtonsoft.Json库(JSON.NET). 2.复制粘贴JsonHelper吧. 源代码: using System; using System.Collections.Gener ...

  2. JsonHelper developed by using Newtonsoft.Json.NET, Deserialize to <T> object , XmlToJson/JsonToXml, QuoteName by using JToken Path.

    namespace TestConsoleApplication { using System; using System.Diagnostics; using System.Threading; u ...

  3. 【C#公共帮助类】JsonHelper 操作帮助类, 以后再也不用满地找Json了,拿来直接用

     四个主要操作类:JsonConverter .JsonHelper .JsonSplit .AjaxResult 一.JsonConverter: 自定义查询对象转换动态类.object动态类转换j ...

  4. C#序列化及反序列化Json对象通用类JsonHelper

    当今的程序界Json大行其道.因为Json对象具有简短高效等优势,广受广大C#码农喜爱.这里发一个序列化及反序列化Json对象通用类库,希望对大家有用. public class JsonHelper ...

  5. asp.net的JSONHelper 类

    调用方法: ){    jsons = json.ToString();}else{    jsons = @"{success:false}";}return jsons; JS ...

  6. C# jsonhelper

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Sc ...

  7. JsonHelper

    .net下的json序列化在以前没有Newtonsoft.Json崭露头角之前采用System.Web.Script.Serialization命名空间下的JavaScriptSerializer对象 ...

  8. JsonHelper类(序列化和反序列化辅助类)

       1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Web; ...

  9. CollatingOfData 之 JsonHelper

    1 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System. ...

随机推荐

  1. SpringMVC拦截器的使用

    SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...

  2. web中c#纯网站中引用log4net模块,不记录日志

    如题,解决如下: 1.log4net.config配置如下: <?xml version="1.0" encoding="utf-8" ?> < ...

  3. 【01-06】JPA 全局单一主键

    建一张主键表 @Override public boolean equals(Object o) { return (o == this || (o instanceof AbstractEntity ...

  4. XUnit - Shared Context between Tests

    原文 单元测试类通常都会有share setup和cleanup的相关代码.xUnit.net根据共享的范围提供了几种share setup和cleanup的方法. Constructor and D ...

  5. JavaMail: SSL vs TLS vs STARTTLS

    SSL vs TLS vs STARTTLS There's often quite a bit of confusion around the different terms SSL, TLS an ...

  6. AVAudioPlayer

    AVAudioPlayer在AVFoundation框架下,所以我们要导入AVFoundation.framework. AVAudioPlayer类封装了播放单个声音的能力.播放器可以用NSURL或 ...

  7. MFC像窗体坐标位置发送 点击消息

    int x11=495;                                        int y22=600;                                     ...

  8. laravel数据库迁移(三)

    laravel号称世界上最好的框架,数据库迁移算上一个,在这里先简单入个门: laravel很强大,它把表中的操作写成了migrations迁移文件,然后可以直接通过迁移文件来操作表.所以 , 数据迁 ...

  9. AM335x tscadc platform driver 相关代码跟踪

    TI AM335x ti am335x_tsc.c 代码跟踪 在kernel 首层目录: 先运行make ARCH=arm tags 这个作用是建立tags文件,只含有arm架构的,利用ctag即可进 ...

  10. xml编辑器

    cstring转cha型方法在mfc中用过可行 int CstringToch(CString str, char *ch) { assert(ch); memset(ch, 0, sizeof(ch ...