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. nginx问题收集

     1.问题: 用户在微信授权成功之后, 跳转到网页时, 出现nginx的错误界面, 复制当前这个链接在网页中打开则正常显示, 同时nginx日志文件中报错(upstream sent too big ...

  2. ORACLE常用数值函数、转换函数、字符串函数

    本文更多将会介绍三思在日常中经常会用到的,或者虽然很少用到,但是感觉挺有意思的一些函数.分二类介绍,分别是: 著名函数篇 -经常用到的函数 非著名函数篇-即虽然很少用到,但某些情况下却很实用 注:N表 ...

  3. spring jdbc 查询结果返回对象、对象列表

    首先,需要了解spring jdbc查询时,有三种回调方式来处理查询的结果集.可以参考 使用spring的JdbcTemplate进行查询的三种回调方式的比较,写得还不错. 1.返回对象(queryF ...

  4. mysql 主主复制搭建用的命令

    # mysql 容器的启动docker run -d -p 3306:3306 -v /database_files/products/data:/var/lib/mysql -v /database ...

  5. iOS9网络适配(ATS)

    [转]iOS9 new_001:iOS9网络适配(ATS) 下载Xcode7打开APP后大家都发现自己的APP无法联网了,why? 苹果官方文档介绍如下: App Transport Security ...

  6. js瀑布流 原理实现揭秘 javascript 原生实现

    web,js瀑布流揭秘 瀑布流再很久之前流行,可能如我一样入行晚的 ,可能就没有机会去使用.但是这个技术终究是个挺炫酷的东西,花了一个上午来研究,用原生js实现了一个,下面会附上源码,供大家解读. 说 ...

  7. EXCEL 2010学习笔记 —— 数据透视表

    今天整理一下EXCEL2010 数据透视表的课程笔记,数据透视表可以对多组数据进行统计和整理,是一种基本的数据可视化工具. 记录6个方面的总结: 1.创建数据透视表 2.更改数据透视表的汇总方式 3. ...

  8. Gridview中运用CommandField 删除控件时注意点

    我在gridview1 <编辑列>里面添加了一个<CommandField 删除>的控件,之后在gridview1的事件<RowDeleting>事件下 写了一段删 ...

  9. string类型转换int类型

    C++转换形式(C++11): int main(int argc, char* argv[]) { std::"; std::string str2 = "3.14159&quo ...

  10. Activity系列讲解---三大基本状态与七大生命周期函数

    简介:四大组件之一,在应用中一个Activity可以用来表示一个界面,可以理解为用户可视化界面,一个android应用必须通过Activity来运行和启动. 1.三大基本状态与七大生命周期函数 2.代 ...