Use JSON as an example of a data interchange format in.NET

  • 2020-05-30 19:50:58
  • OfStack

We know that in NET we have multiple ways of serializing objects, such as XML serialization and Binary serialization, among which XML serialization is a more common way of transferring data between languages. In addition to these two serializations, you can also use JSON serialization in NET.

JSON (JavaScript Object Notation) is a lightweight and lightweight data exchange format, and it is independent of the programming language. Compared with XML serialization, JSON serialized data 1 is generally smaller than XML serialized data 1, so JSON is adopted as the data exchange method in Facebook and other well-known websites. There are three common JSON serialized classes in NET: SystemWebScriptSerializationJavaScriptSerializer, SystemRuntimeSerializationJsonDataContractJsonSerializer, and NewtonsoftJsonJsonConvert.

To facilitate the following demonstration, the following code is provided for a class:
 
[DataContract] 
publicclass User 
{ 
///<summary> 
///  Serial number  
///</summary> 
[DataMember] 
publicint UserId { get; set; } 
///<summary> 
///  The user name  
///</summary> 
[DataMember] 
publicstring UserName { get; set; } 
///<summary> 
///  Creation time  
///</summary> 
[DataMember] 
[JsonConverter(typeof(IsoDateTimeConverter))] 
public DateTime CreateDate { get; set; } 
///<summary> 
///  birthday  
///</summary> 
[DataMember] 
[JsonConverter(typeof(JavaScriptDateTimeConverter))] 
public DateTime Birthday { get; set; } 
///<summary> 
///  related URL 
///</summary> 
[DataMember] 
public List<string> Urls { get; set; } 
///<summary> 
///  salary  
///</summary> 
//[ScriptIgnore]// use JavaScriptSerializer序列化时不序列化此字段 
//[IgnoreDataMember]// use DataContractJsonSerializer序列化时不序列化此字段 
//[JsonIgnore]// use JsonConvert序列化时不序列化此字段 
publicint Salary { get; set; } 
///<summary> 
///  The right level  
///</summary> 
[DataMember] 
public Priority Priority { get; set; } 
public User() 
{ 
Urls =new List<string>(); 
} 
} 
///<summary> 
///  The right level  
///</summary> 
publicenum Priority:byte 
{ 
Lowest=0x1, 
BelowNormal=0x2, 
Normal=0x4, 
AboveNormal=0x8, 
Highest=0x16 
} 

Using SystemWebScriptSerializationJavaScriptSerializer class
The SystemWebScriptSerializationJavaScriptSerializer class is a serialization implementation of JSON that comes with the NET class library. This class is available in NET Framework5 and later. This class is located in SystemWebExtensionsdll.
The following code is an example of serialization and deserialization using JavaScriptSerializer:
 
publicstaticvoid JavaScriptSerializerDemo() 
{ 
User user =new User { UserId =1, UserName =" Li Gang ", CreateDate = DateTimeNowAddYears(-30),Birthday=DateTimeNowAddYears(-50), Priority = PriorityHighest, Salary =500000 }; 
//JavaScriptSerializer Class in SystemWebExtensionsdll Note that the reference is added  
JavaScriptSerializer serializer =new JavaScriptSerializer(); 
//JSON serialization  
string result=serializerSerialize(user); 
ConsoleWriteLine(" use JavaScriptSerializer Serialized results: {0}, Length: {1}", result, resultLength); 
//JSON deserialization  
user = serializerDeserialize<User>(result); 
ConsoleWriteLine(" use JavaScriptSerializer Deserialized results: UserId:{0},UserName: {1},CreateDate:{2},Priority:{3}", userUserId, userUserName, userCreateDate, userPriority); 
} 

Note: if you don't want to serialize a field, you can prefix the field with an [JsonIgnore] flag.
Using SystemRuntimeSerializationJsonDataContractJsonSerializer class
The SystemRuntimeSerializationJsonDataContractJsonSerializer class is located in SystemServiceModelWebdll. You need to add a reference to SystemRuntimeSerializationdll as well as to SystemServiceModelWebdll. Note that this class is also available in NET Framework5 and later.
Here's an example of using the DataContractJsonSerializer class:
 
publicstaticvoid DataContractJsonSerializerDemo() 
{ 
User user =new User { UserId =1, UserName =" Li Gang ", CreateDate = DateTimeNowAddYears(-30), Birthday = DateTimeNowAddYears(-50), Priority = PriorityAboveNormal, Salary =50000 }; 
string result =stringEmpty; 
//DataContractJsonSerializer Class in SystemServiceModelWebdll Note that the reference is added  
DataContractJsonSerializer serializer =new DataContractJsonSerializer(typeof(User)); 
using (MemoryStream stream =new MemoryStream()) 
{ 
//JSON serialization  
serializerWriteObject(stream, user); 
result = EncodingUTFGetString(streamToArray()); 
ConsoleWriteLine(" use DataContractJsonSerializer Serialized results: {0}, Length: {1}", result, resultLength); 
} 
//JSON deserialization  
byte[] buffer = EncodingUTFGetBytes(result); 
using (MemoryStream stream =new MemoryStream(buffer)) 
{ 
user = serializerReadObject(stream) as User; 
ConsoleWriteLine(" use DataContractJsonSerializer Deserialized results: UserId: {0},UserName:{1},CreateDate:{2},Priority:{3}", userUserId, userUserName, userCreateDate, userPriority); 
} 
} 

Note: to use the DataContractJsonSerializer class for serialization and deserialization, you must add the [DataContract] attribute to the class, the [DataMember] attribute to the field you want to serialize, or the [IgnoreDataMember] attribute if you don't want to serialize a field or property.
Using NewtonsoftJsonJsonConvert class
The NewtonsoftJsonJsonConvert class is an open source free JSON serialization and de-serialization library provided by Microsoft (download at: http://wwwcodeplexcom/json/), it provides more flexible serialization and deserialization control, and if your development environment is using NET Framework5 and later, you can use Linq to JSON, so that you can use Linq to JSON to parse out the parts you care about, rather than 11.
Here is an example of using the NewtonsoftJsonJsonConvert class:
 
publicstaticvoid JsonConvertDemo() 
{ 
User user =new User { UserId =1, UserName =" Li Gang ", CreateDate = DateTimeNowAddYears(-30), Birthday = DateTimeNowAddYears(-50), Priority = PriorityBelowNormal, Salary =5000 }; 
//JsonConvert Class in NewtonsoftJsonNetdll In, notice http://wwwcodeplexcom/json/ Download this dll And add the reference  
//JSON serialization  
string result = JsonConvertSerializeObject(user); 
ConsoleWriteLine(" use JsonConvert Serialized results: {0}, Length: {1}", result, resultLength); 
//JSON deserialization  
user = JsonConvertDeserializeObject<User>(result); 
ConsoleWriteLine(" use JsonConvert Deserialized results: UserId:{0},UserName: {1},CreateDate:{2},Priority:{3}", userUserId, userUserName, userCreateDate, userPriority); 
} 
publicstaticvoid JsonConvertLinqDemo() 
{ 
User user =new User { UserId =1, UserName =" Duke of zhou ", CreateDate = DateTimeNowAddYears(-8), Birthday = DateTimeNowAddYears(-32), Priority = PriorityLowest, Salary =500, Urls =new List<string> { "http://zhoufoxcnblog51ctocom", "https://www.ofstack.com" } }; 
//JsonConvert Class in NewtonsoftJsonNetdll In, notice http://wwwcodeplexcom/json/ Download this dll And add the reference  
//JSON serialization  
string result = JsonConvertSerializeObject(user); 
ConsoleWriteLine(" use JsonConvert Serialized results: {0}, Length: {1}", result, resultLength); 
// use Linq to JSON 
JObject jobject = JObjectParse(result); 
JToken token = jobject["Urls"]; 
List<string> urlList =new List<string>(); 
foreach (JToken t in token) 
{ 
urlListAdd(tToString()); 
} 
ConsoleWrite(" use Linq to JSON Deserialized results: ["); 
for (int i =0; i < urlListCount -1;i++ ) 
{ 
ConsoleWrite(urlList[i] +","); 
} 
ConsoleWriteLine(urlList[urlListCount -1] +"]"); 
} 

Note: if you have a field that does not need to be serialized, you can add an [JsonIgnore] flag to that field. In Newtonsoft the serialization of the dates on which this class in the library there are many ways, can add the corresponding mark in DataTime members of a class, so in the serialization and deserialization will follow a prescribed manner, in this case User CreateDate attributes of a class to add attribute is [JsonConverter (typeof (IsoDateTimeConverter)], and Birthday add attribute is [JsonConverter (typeof (JavaScriptDateTimeConverter)], you can see from the result of the serialized they eventually forms is not 1 sample.
All the sample code in this article is as follows:
 
using System; 
using SystemCollectionsGeneric; 
using SystemLinq; 
using SystemText; 
using SystemWebScriptSerialization; 
using SystemRuntimeSerializationJson; 
using SystemIO; 
using SystemRuntimeSerialization; 
using NewtonsoftJson; 
using NewtonsoftJsonLinq; 
using NewtonsoftJsonConverters; 
namespace JSONDemo 
{ 
class Program 
{ 
staticvoid Main(string[] args) 
{ 
JavaScriptSerializerDemo(); 
DataContractJsonSerializerDemo(); 
JsonConvertDemo(); 
JsonConvertLinqDemo(); 
ConsoleReadLine(); 
} 
publicstaticvoid JavaScriptSerializerDemo() 
{ 
User user =new User { UserId =1, UserName =" Li Gang ", CreateDate = DateTimeNowAddYears(-30),Birthday=DateTimeNowAddYears(-50), Priority = PriorityHighest, Salary =500000 }; 
//JavaScriptSerializer Class in SystemWebExtensionsdll Note that the reference is added  
JavaScriptSerializer serializer =new JavaScriptSerializer(); 
//JSON serialization  
string result=serializerSerialize(user); 
ConsoleWriteLine(" use JavaScriptSerializer Serialized results: {0}, Length: {1}", result, resultLength); 
//JSON deserialization  
user = serializerDeserialize<User>(result); 
ConsoleWriteLine(" use JavaScriptSerializer Deserialized results: UserId:{0},UserName:{1},CreateDate:{2},Priority:{3}", userUserId, userUserName, userCreateDate, userPriority); 
} 
publicstaticvoid DataContractJsonSerializerDemo() 
{ 
User user =new User { UserId =1, UserName =" Li Gang ", CreateDate = DateTimeNowAddYears(-30), Birthday = DateTimeNowAddYears(-50), Priority = PriorityAboveNormal, Salary =50000 }; 
string result =stringEmpty; 
//DataContractJsonSerializer Class in SystemServiceModelWebdll Note that the reference is added  
DataContractJsonSerializer serializer =new DataContractJsonSerializer(typeof(User)); 
using (MemoryStream stream =new MemoryStream()) 
{ 
//JSON serialization  
serializerWriteObject(stream, user); 
result = EncodingUTFGetString(streamToArray()); 
ConsoleWriteLine(" use DataContractJsonSerializer Serialized results: {0}, Length: {1}", result, resultLength); 
} 
//JSON deserialization  
byte[] buffer = EncodingUTFGetBytes(result); 
using (MemoryStream stream =new MemoryStream(buffer)) 
{ 
user = serializerReadObject(stream) as User; 
ConsoleWriteLine(" use DataContractJsonSerializer Deserialized results: UserId:{0},UserName:{1},CreateDate:{2},Priority:{3}", userUserId, userUserName, userCreateDate, userPriority); 
} 
} 
publicstaticvoid JsonConvertDemo() 
{ 
User user =new User { UserId =1, UserName =" Li Gang ", CreateDate = DateTimeNowAddYears(-30), Birthday = DateTimeNowAddYears(-50), Priority = PriorityBelowNormal, Salary =5000 }; 
//JsonConvert Class in NewtonsoftJsonNetdll In, notice http://wwwcodeplexcom/json/ Download this dll And add the reference  
//JSON serialization  
string result = JsonConvertSerializeObject(user); 
ConsoleWriteLine(" use JsonConvert Serialized results: {0}, Length: {1}", result, resultLength); 
//JSON deserialization  
user = JsonConvertDeserializeObject<User>(result); 
ConsoleWriteLine(" use JsonConvert Deserialized results: UserId:{0},UserName:{1},CreateDate:{2},Priority:{3}", userUserId, userUserName, userCreateDate, userPriority); 
} 
publicstaticvoid JsonConvertLinqDemo() 
{ 
User user =new User { UserId =1, UserName =" Duke of zhou ", CreateDate = DateTimeNowAddYears(-8), Birthday = DateTimeNowAddYears(-32), Priority = PriorityLowest, Salary =500, Urls =new List<string> { "http://zhoufoxcnblog51ctocom", "https://www.ofstack.com" } }; 
//JsonConvert Class in NewtonsoftJsonNetdll In, notice http://wwwcodeplexcom/json/ Download this dll And add the reference  
//JSON serialization  
string result = JsonConvertSerializeObject(user); 
ConsoleWriteLine(" use JsonConvert Serialized results: {0}, Length: {1}", result, resultLength); 
// use Linq to JSON 
JObject jobject = JObjectParse(result); 
JToken token = jobject["Urls"]; 
List<string> urlList =new List<string>(); 
foreach (JToken t in token) 
{ 
urlListAdd(tToString()); 
} 
ConsoleWrite(" use Linq to JSON Deserialized results: ["); 
for (int i =0; i < urlListCount -1;i++ ) 
{ 
ConsoleWrite(urlList[i] +","); 
} 
ConsoleWriteLine(urlList[urlListCount -1] +"]"); 
} 
} 
[DataContract] 
publicclass User 
{ 
///<summary> 
///  Serial number  
///</summary> 
[DataMember] 
publicint UserId { get; set; } 
///<summary> 
///  The user name  
///</summary> 
[DataMember] 
publicstring UserName { get; set; } 
///<summary> 
///  Creation time  
///</summary> 
[DataMember] 
[JsonConverter(typeof(IsoDateTimeConverter))] 
public DateTime CreateDate { get; set; } 
///<summary> 
///  birthday  
///</summary> 
[DataMember] 
[JsonConverter(typeof(JavaScriptDateTimeConverter))] 
public DateTime Birthday { get; set; } 
///<summary> 
///  related URL 
///</summary> 
[DataMember] 
public List<string> Urls { get; set; } 
///<summary> 
///  salary  
///</summary> 
[ScriptIgnore]// use JavaScriptSerializer This field is not serialized when serialized  
[IgnoreDataMember]// use DataContractJsonSerializer This field is not serialized when serialized  
[JsonIgnore]// use JsonConvert This field is not serialized when serialized  
publicint Salary { get; set; } 
///<summary> 
///  The right level  
///</summary> 
[DataMember] 
public Priority Priority { get; set; } 
public User() 
{ 
Urls =new List<string>(); 
} 
} 
///<summary> 
///  The right level  
///</summary> 
publicenum Priority:byte 
{ 
Lowest=0x1, 
BelowNormal=0x2, 
Normal=0x4, 
AboveNormal=0x8, 
Highest=0x16 
} 
} 

The results of the program are as follows:
1. Use JavaScriptSerializer serialized results: {" UserId ": 1," UserName ":" li ", "CreateDate" : "\ / Date \ /" (353521211984), "Birthday" : "\ / Date \ /" (277630788015), "Urls" : [], "Priority" : 22}, length: 127
2. Deserialized JavaScriptSerializer: UserId :1, UserName: li gang, CreateDate: 1981-3-15 16:20:11, Priority: Highest
3. Use DataContractJsonSerializer serialized results: {" Birthday ":" \ / Date (277630787953 + 0800) \ / ", "CreateDate" : "\ / Date (353521212046 + 0800) \ /", "Priority" : 8, "Urls" : [], "UserId" : 1, "UserName" : "li gang"}, length: 136
4. Deserialized DataContractJsonSerializer: UserId :1, UserName: li gang, CreateDate: 1981-3-16 0:20:12, Priority: AboveNormal
5. Serialized results using JsonConvert: {" UserId ":1," UserName ":" li gang ", "CreateDate" : "1981-03-16 T00:20:12. 1875 + 08:00", "Birthday" : new Date (-277630787812), "Urls" : [], "Priority" : 2}, length: 132
6. Deserialized using JsonConvert: UserId :1, UserName: li gang, CreateDate: 1981-3-160:20:12, Priority: BelowNormal
7. Serialized results using JsonConvert: {" UserId ": 1," UserName ":" duke of zhou ", "CreateDate" : "the 2003-03-16 T00: however. 40625 + 08:00", "Birthday" : new Date (290362812406), "Urls" : [" http: / / office. ofstack. com ", "https: / / www. ofstack. com/web"], "Priority" : 1}, length: 198
8. Use Linq to JSON results after deserialization: [" http: / / office. ofstack. com ", https: / / www ofstack. com/web]

Summary: you can see from the above example that the Newtonsoft class library provides a more flexible way to serialize and deserialize JSON. In actual development, Newtonsoft is also used as an alternative to JSON serialization and deserialization.

Related articles: