C 在Json反序列化中處理鍵的特殊字元

2022-02-22 08:09:54 字數 2575 閱讀 4115

假設有如下json 資料:

通常情況下,在json反序列化時,將json對映到序列化的類,無需指定其名稱。如

public jsontest

}

在反序列化時會自動將json中的id與類中的id對應。

但是當鍵有特殊字元時,如 $ , @ 等,無法定義類的屬性中含有特殊字元,

因此,需要使用 [datacontract] 和 [datamember] 來定義資料協定

1     [datacontract]

2public

class jtest

3

6 [datamember(order = 1, name = "

@value

")]7

public

string value

8 [datamember(order = 2, name = "

$p")]

9public

string _p

10 }

反序列化

1    jtest test = serializer.readobject(new memorystream(encoding.utf8.getbytes(jsonstr))) as jtest;

2 console.writeline( test.value );

序列化

1

var stream = new memorystream();

2 serializer.writeobject(stream, test);

3byte databytes = new

byte[stream.length];

4 stream.position = 0;

5 stream.read(databytes, 0, (int)stream.length);

6string datastring = encoding.utf8.getstring(databytes);

完整測試類:

1

using system;

2using system.text;

3using system.runtime.serialization;

4using system.runtime.serialization.json;

5using system.io;67

8class program

11

";15 datacontractjsonserializer serializer = new datacontractjsonserializer(typeof(jtest));

1617

//反序列化

18 jtest test = serializer.readobject(new memorystream(encoding.utf8.getbytes(jsonstr))) as jtest;

19 console.writeline( test.value );

2021

//序列化

22var stream = new memorystream();

23 serializer.writeobject(stream, test);

24byte databytes = new

byte[stream.length];

25 stream.position = 0;

26 stream.read(databytes, 0, (int)stream.length);

27string datastring = encoding.utf8.getstring(databytes);

2829 console.writeline(datastring);

30 console.readkey();

31 }

32 }

33 [datacontract]

34public

class jtest

35

38 [datamember(order = 1, name = "

@value

")]39

public

string value

40 [datamember(order = 2, name = "

$p")]

41public

string _p

42 }

43 }

C 中JSON序列化和反序列化

最近在寫些呼叫他人介面的程式,用到了大量的json xml序列化和反序列化,今天就來總結下json的序列化和反序列化的實現,有寫得不好的望園中博友多多指教。json序列化和反序列化幫助類 using system using system.collections.generic using syst...

json序列化 反序列化

json序列化 json的dumps方法可以將json格式資料序列為python的相關資料型別,比如str,常用於列印,另外,在序列化時,中文漢字被轉換為unicode編碼,在dumps函式中新增引數ensure ascii false可解決 dumps的indent參考可以調整顯示格式,即縮排,一...

C 中的Json的序列化和反序列化

json是一種通用的資料格式,我們在資料交換的時候,經常會用到,下面介紹c 中的json序列化和反序列化,當然也可用在asp.net,silverlight,wpf中。我們在下面例項講解如何進行json的序列化和反序列化,本文介紹兩種方案,net 3.5原生json操作和json.net中的json...