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. C# 获取磁盘剩余空间

    drive.TotalFreeSpace单位为bit,根据需要除以1024 drive同时可以可以获取磁盘分区容量等 //单位MB public static long GetHardDiskSpac ...

  2. Linux下数据恢复软件extundelete

    extundelete软件专门解决意外删除事件的,有时候不小心 rm -rf * 就可能毁掉有用的数据.因此就出现了这个恢复工具,但这个工具也不是万能的,删除数据后一定要停止所以的写操作.以免Inod ...

  3. 无法对 索引 'IndexName' 执行 删除,因为它不存在,或者您没有所需的权限。

    先写结论: 语法:  DROP INDEX 表名.索引名 如果索引明明存在..却报标题上那个错..请直接去看是否是表名与库中的不一样.. 请一定去检查一下..别问我为什么这么说.. if exists ...

  4. 手机端页面自适应之rem布局

    W3C官网上是这样描述rem的--"font size of the root element" . rem布局在移动端发挥的比较好. 阿里团队高清方案: <script&g ...

  5. jquery select操作大全

    添加option $("#ID option").each(function(){ if($(this).val() == 111){ $(this).remove(); } }) ...

  6. 消除类游戏(js版)

    最近一直在玩一款消灭星星的消除类游戏,周末无聊就用js也写了一遍,感觉玩比写还困难一直玩不到10000分.废话不多说直接上源码. 效果图(ps 页面有点难看木有美工) 代码总共456行,未经过严格测试 ...

  7. eclipse中的classes文件夹同步问题

    问题: 在同步项目时,由于误操作将classes文件夹加入到了同步版本中,这样会导致每次更新程序编译后,会有很多class文件显示在同步清单中. 解决方案: 将classes文件不设置为同步. 1. ...

  8. python多种格式数据加载、处理与存储

    多种格式数据加载.处理与存储 实际的场景中,我们会在不同的地方遇到各种不同的数据格式(比如大家熟悉的csv与txt,比如网页HTML格式,比如XML格式),我们来一起看看python如何和这些格式的数 ...

  9. Qt拖拽界面 (*.ui) 缩放问题及解决办法

    问题 使用Qt Designer 设计的界面,在缩放的时候不能随着主窗口一起缩放. 解决办法 之前遇到这个问题的时候,都是直接重写resizeEvent接口来实现的,在自动生成的Ui_Widget或U ...

  10. flex实验总结

    1.父元素 .box{ display:flex; flex-direction: column;//铺满垂直排列 flex-direction: column-reverse;//铺满垂直反向排列 ...