JsonHelper MergeJsonTemplate
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JsonHelper MergeJsonTemplate,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含9912字,纯文字阅读大概需要15分钟。
内容图文
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;
}
}
}
}
}
|
原文:http://www.cnblogs.com/Microshaoft/p/6158129.html
内容总结
以上是互联网集市为您收集整理的JsonHelper MergeJsonTemplate全部内容,希望文章能够帮你解决JsonHelper MergeJsonTemplate所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。