C# Json 역정렬에서 키를 처리하는 특수 문자
8700 단어 json
view source
?
1.
{
2.
"id"
: 1,
3.
"@value"
:
"this a @"
,
4.
"$p"
:
"my name a $"
5.
}
일반적으로 Json이 반서열화될 때, Json을 서열화된 클래스에 비추어 이름을 지정할 필요가 없다.예컨대
view source
?
1.
public
JsonTest{
2.
public
string
id{
get
;
set
;}
3.
}
Json의 ID는 반서열화할 때 클래스의 ID와 자동으로 대응합니다.
그러나 키에 특수 문자가 있을 때 $, @ 등은 클래스의 속성에 특수 문자를 정의할 수 없습니다.
따라서 [DataContract]와 [DataMember]를 사용해야 합니다.
데이터 협정을 정의하다.
view source
?
01.
[DataContract]
02.
public
class
jtest
03.
{
04.
[DataMember(Order = 0)]
05.
public
int
id {
get
;
set
; }
06.
[DataMember(Order = 1, Name =
"@value"
)]
07.
public
string
value {
get
;
set
; }
08.
[DataMember(Order = 2, Name =
"$p"
)]
09.
public
string
_p {
get
;
set
; }
10.
}
역서열화
view source
?
1.
jtest test = serializer.ReadObject(
new
MemoryStream(Encoding.UTF8.GetBytes(jsonStr)))
as
jtest;
2.
Console.WriteLine( test.value );
서열화
view source
?
1.
var stream =
new
MemoryStream();
2.
serializer.WriteObject(stream, test);
3.
byte
[] dataBytes =
new
byte
[stream.Length];
4.
stream.Position = 0;
5.
stream.Read(dataBytes, 0, (
int
)stream.Length);
6.
string
dataString = Encoding.UTF8.GetString(dataBytes);
전체 테스트 클래스:
view source
?
01.
using
System;
02.
using
System.Text;
03.
using
System.Runtime.Serialization;
04.
using
System.Runtime.Serialization.Json;
05.
using
System.IO;
06.
07.
08.
namespace
ConsoleApplication1
09.
{
10.
class
Program
11.
{
12.
static
void
Main(
string
[] args)
13.
{
14.
string
jsonStr =
"{\"id\":1,\"@value\":\"this a @\",\"$p\":\"my name a $\"}"
;
15.
DataContractJsonSerializer serializer =
new
DataContractJsonSerializer(
typeof
(jtest));
16.
17.
//
18.
jtest test = serializer.ReadObject(
new
MemoryStream(Encoding.UTF8.GetBytes(jsonStr)))
as
jtest;
19.
Console.WriteLine( test.value );
20.
21.
//
22.
var stream =
new
MemoryStream();
23.
serializer.WriteObject(stream, test);
24.
byte
[] dataBytes =
new
byte
[stream.Length];
25.
stream.Position = 0;
26.
stream.Read(dataBytes, 0, (
int
)stream.Length);
27.
string
dataString = Encoding.UTF8.GetString(dataBytes);
28.
29.
Console.WriteLine(dataString);
30.
Console.ReadKey();
31.
}
32.
}
33.
[DataContract]
34.
public
class
jtest
35.
{
36.
[DataMember(Order = 0)]
37.
public
int
id {
get
;
set
; }
38.
[DataMember(Order = 1, Name =
"@value"
)]
39.
public
string
value {
get
;
set
; }
40.
[DataMember(Order = 2, Name =
"$p"
)]
41.
public
string
_p {
get
;
set
; }
42.
}
43.
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콘텐츠 SaaS | JSON 스키마 양식 빌더Bloomreach Content를 위한 JSON Form Builder 맞춤형 통합을 개발합니다. 최근 Bloomreach Content SaaS는 내장 앱 프레임워크를 사용하여 혁신적인 콘텐츠 유형 필드를 구축할...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.