Newtonsoft.Json
Newtonsoft.Json 是.Net平台操作Json的工具,他的介紹就不多說了,筆者最近在弄接口,需要操作Json。
以某個雲計算平台的Token為例,邊操作邊講解。
Json 轉為 Model
將 Model 轉為 Json
將 LINQ 轉為 JSON
Linq 操作
命名空間、類型、方法大全
另外附上 百度AI 文字識別 Json 及其模型類

Newtonsoft.Json 將字符串轉為對象,是根據類型對象名稱進行的,大小寫不分,但是名稱要一致要,哪怕你的json只有一個
{ "a":1 }
你的對象
public class Test { public int aa{get;set;} }
也是不能對應的。
有復雜層次的 json,可以使用 “類中類” 來映射,要注意 List<T>/Array/ArrayList的類型的使用。
Json 轉為 Model
新建一個 Json 文件,名字隨意,例如 json1.json
把以下內容粘貼進去
{ "refresh_token": "25.ea2f85ebd48df85fe5400000.18640.282335-15533349", "expires_in": 2592010, "session_key": "9mzdWr3n8ncMeDgX8zjhkhlW8khb5cdZtPevPbPwQGBg==", "access_token": "24.ac0ca9fakhlkyhl552017858.282335-15533349", "scope": "audio_voice_assistant_get audio_tts_post public vis-ocr_ocr nlp_simnet nlp_wclassify_watermark brain_ocr_scope vis-classify_car brain_gif_antiporn brain_ocr_general brain_ocr_general_basic brain_ocr_generer vis-classify_animal brain_politician brain_unit_utterance brain_imgquality_general brain_nlp_simnet brain_nlp_depparser vis-classify_plant brain_solution brain_ocr_plate_number brain_nlp_wordembedding brain_nlp_dnnlm_cn_legacy brain_nlp_simnet_legacy brain_nlp_commain_animal_classify brain_plant_classify brain_solution_iocr brain_realtime_product brain_nlp_lexer_custom brain_kgbody_analysis brain_body_attr brain_ocr_vat_invoice brain_advanced_general_classify brain_numbers brain_body_number vis-faceverify_FACE_auth_sessionkey smartapp_swanid_verify smartapp_opensource_openapi", "session_secret": "2ca66d464545c77a4767f709873be4" }
定義一個模型,文件名為 AccessTokenModel.cs
public class AccessTokenModel { public string refresh_token { get; set; } public string expires_in { get; set; }//: Access Token的有效期(秒為單位,一般為1個月) public string scope { get; set; } public string session_key { get; set; } public string access_token { get; set; }//: 要獲取的Access Token public string session_secret { get; set; } }
打開 Program.cs 文件
public static void Main(string[] args) { FileStream fs = new FileStream(@"請修改成你的文件路徑\json1.json", FileMode.Open); StreamReader fileStream = new StreamReader(fs); string str = ""; string line; while ((line = fileStream.ReadLine()) != null) { str += line; }
//上面的代碼沒有意義,只是將Json文件的內容加載到字符串中
JObject jObject = new JObject(); //新建 操作對象 AccessTokenModel a = JsonConvert.DeserializeObject<AccessTokenModel>(str); Console.WriteLine(a.access_token); //隨意輸出一個屬性 Console.ReadKey(); }
重點方法
JsonConvert.DeserializeObject<要轉化的模型類>("字符串對象");
之后可以很方便的把Json文件的內容存放到數據庫中。
集合
把Json文件改成以下的樣子
[{ "refresh_token": "25.ea2f85ebd48df85fe5400000.18640.282335-15533349", "expires_in": 2592010, "session_key": "9mzdWr3n8ncMeDgX8zjhkhlW8khb5cdZtPevPbPwQGBg==", "access_token": "24.ac0ca9fakhlkyhl552017858.282335-15533349", "scope": "audio_voice_assistant_get audio_tts_post public vis-ocr_ocr nlp_simnet nlp_wclassify_watermark brain_ocr_scope vis-classify_car brain_gif_antiporn brain_ocr_general brain_ocr_general_basic brain_ocr_generer vis-classify_animal brain_politician brain_unit_utterance brain_imgquality_general brain_nlp_simnet brain_nlp_depparser vis-classify_plant brain_solution brain_ocr_plate_number brain_nlp_wordembedding brain_nlp_dnnlm_cn_legacy brain_nlp_simnet_legacy brain_nlp_commain_animal_classify brain_plant_classify brain_solution_iocr brain_realtime_product brain_nlp_lexer_custom brain_kgbody_analysis brain_body_attr brain_ocr_vat_invoice brain_advanced_general_classify brain_numbers brain_body_number vis-faceverify_FACE_auth_sessionkey smartapp_swanid_verify smartapp_opensource_openapi", "session_secret": "2ca66d464545c77a4767f709873be4" }, { "refresh_token": "25.ea2f85ebd48df85fe5400000.18640.282335-15533349", "expires_in": 2592010, "session_key": "9mzdWr3n8ncMeDgX8zjhkhlW8khb5cdZtPevPbPwQGBg==", "access_token": "24.ac0ca9fakhlkyhl552017858.282335-15533349", "scope": "audio_voice_assistant_get audio_tts_post public vis-ocr_ocr nlp_simnet nlp_wclassify_watermark brain_ocr_scope vis-classify_car brain_gif_antiporn brain_ocr_general brain_ocr_general_basic brain_ocr_generer vis-classify_animal brain_politician brain_unit_utterance brain_imgquality_general brain_nlp_simnet brain_nlp_depparser vis-classify_plant brain_solution brain_ocr_plate_number brain_nlp_wordembedding brain_nlp_dnnlm_cn_legacy brain_nlp_simnet_legacy brain_nlp_commain_animal_classify brain_plant_classify brain_solution_iocr brain_realtime_product brain_nlp_lexer_custom brain_kgbody_analysis brain_body_attr brain_ocr_vat_invoice brain_advanced_general_classify brain_numbers brain_body_number vis-faceverify_FACE_auth_sessionkey smartapp_swanid_verify smartapp_opensource_openapi", "session_secret": "2ca66d464545c77a4767f709873be4" } ]
public static void Main(string[] args) { FileStream fs = new FileStream(@"請修改成你的文件路徑\json1.json", FileMode.Open); StreamReader fileStream = new StreamReader(fs); string str = ""; string line; while ((line = fileStream.ReadLine()) != null) { str += line; } //上面的代碼沒有意義,只是將Json文件的內容加載到字符串中 JObject jObject = new JObject(); //新建 操作對象 List<AccessTokenModel> a = JsonConvert.DeserializeObject<List<AccessTokenModel>>(str); foreach (var i in a) { Console.WriteLine(i.access_token); } Console.ReadKey(); }
將Model轉為Json
能夠將模型對象轉為 Json。
繼續使用上面的 AccessTokenModel.cs 文件,
public static void Main(string[] args) { AccessTokenModel accessTokenModel = new AccessTokenModel(); accessTokenModel.access_token = "test1"; accessTokenModel.expires_in = "test2"; accessTokenModel.refresh_token = "test3"; accessTokenModel.scope = "test4"; accessTokenModel.session_key = "test5"; accessTokenModel.session_secret = "test6"; JObject jObject = new JObject(); string str = JsonConvert.SerializeObject(accessTokenModel); //轉為字符串 Console.WriteLine(str); Console.ReadKey(); }
重點方法
JsonConvert.SerializeObject(a模型對象);
運行后可以看到控制台輸出的是Json字符串了,你可以繼續把他放到Json文件中,這里不再贅述。
將 LINQ 轉為 JSON
下面這個是從官網直接copy的例子,Jarray 是其框架提供的一種類型。
在控制台運行后會發現輸出的字符是已經格式化的。
public static void Main(string[] args) { JArray array = new JArray(); array.Add("Manual text"); array.Add(new DateTime(2000, 5, 23)); JObject o = new JObject(); o["MyArray"] = array; string json = o.ToString(); // { // "MyArray": [ // "Manual text", // "2000-05-23T00:00:00" // ] // } Console.WriteLine(json); Console.ReadKey();
Linq 操作
框架提供了對 Jobject 對象的Linq操作支持
using Newtonsoft.Json.Linq;
之后你可以像操作數組、集合或者Context一樣方便。
命名空間、類型、方法大全

本來想翻譯一下的,英語太差,算了。在常用的類型前面加粗吧
| Class | Description | |||
|---|---|---|---|---|
![]() |
DefaultJsonNameTable |
The default JSON name table implementation.
|
||
![]() |
JsonArrayAttribute |
Instructs the
JsonSerializer how to serialize the collection.
|
||
![]() |
JsonConstructorAttribute |
Instructs the
JsonSerializer to use the specified constructor when deserializing that object.
|
||
![]() |
JsonContainerAttribute |
Instructs the
JsonSerializer how to serialize the object.
|
||
![]() ![]() |
JsonConvert |
提供用於在.NET 和 Json之間互相轉等操作的方法
|
||
![]() |
JsonConverter |
Converts an object to and from JSON.
|
||
![]() |
JsonConverter<T> |
Converts an object to and from JSON.
|
||
![]() |
JsonConverterAttribute |
Instructs the
JsonSerializer to use the specified
JsonConverter when serializing the member or class.
|
||
![]() |
JsonConverterCollection |
Represents a collection of
JsonConverter.
|
||
![]() |
JsonDictionaryAttribute |
Instructs the
JsonSerializer how to serialize the collection.
|
||
![]() |
JsonException |
JSON序列化或反序列化過程中發生錯誤時引發的異常類型
|
||
![]() |
JsonExtensionDataAttribute |
Instructs the
JsonSerializer to deserialize properties with no matching class member into the specified collection and write values during serialization.
|
||
![]() |
JsonIgnoreAttribute |
Instructs the
JsonSerializer not to serialize the public field or public read/write property value.
|
||
![]() |
JsonNameTable |
Base class for a table of atomized string objects.
|
||
![]() |
JsonObjectAttribute |
Instructs the
JsonSerializer how to serialize the object.
|
||
![]() |
JsonPropertyAttribute |
Instructs the
JsonSerializer to always serialize the member with the specified name.
|
||
![]() |
JsonReader |
Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data.
|
||
![]() |
JsonReaderException |
The exception thrown when an error occurs while reading JSON text.
|
||
![]() |
JsonRequiredAttribute |
Instructs the
JsonSerializer to always serialize the member, and to require that the member has a value.
|
||
![]() |
JsonSerializationException |
The exception thrown when an error occurs during JSON serialization or deserialization.
|
||
![]() |
JsonSerializer |
Serializes and deserializes objects into and from the JSON format. The
JsonSerializer enables you to control how objects are encoded into JSON.
|
||
![]() |
JsonSerializerSettings |
Specifies the settings on a
JsonSerializer object.
|
||
![]() |
JsonTextReader |
Represents a reader that provides fast, non-cached, forward-only access to JSON text data.
|
||
![]() |
JsonTextWriter |
Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
|
||
![]() |
JsonValidatingReader | Obsolete.
Represents a reader that provides JsonSchema validation.
|
||
![]() |
JsonWriter |
Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
|
||
![]() |
JsonWriterException |
The exception thrown when an error occurs while writing JSON text.
|
Interfaces
| Interface | Description | |
|---|---|---|
![]() |
IArrayPool<T> |
Provides an interface for using pooled arrays.
|
![]() |
IJsonLineInfo |
Provides an interface to enable a class to return line and position information.
|
Enumerations
| Enumeration | Description | |
|---|---|---|
![]() |
ConstructorHandling |
Specifies how constructors are used when initializing objects during deserialization by the
JsonSerializer.
|
![]() |
DateFormatHandling |
Specifies how dates are formatted when writing JSON text.
|
![]() |
DateParseHandling |
Specifies how date formatted strings, e.g.
"\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text.
|
![]() |
DateTimeZoneHandling |
Specifies how to treat the time value when converting between string and
DateTime.
|
![]() ![]() |
DefaultValueHandling |
Specifies default value handling options for the
JsonSerializer.
|
![]() |
FloatFormatHandling |
Specifies float format handling options when writing special floating point numbers, e.g.
NaN,
PositiveInfinity and
NegativeInfinity with
JsonWriter.
|
![]() |
FloatParseHandling |
Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
|
![]() |
Formatting |
Specifies formatting options for the
JsonTextWriter.
|
![]() |
JsonReader.State |
Specifies the state of the reader.
|
![]() |
JsonToken |
Specifies the type of JSON token.
|
![]() |
MemberSerialization |
Specifies the member serialization options for the
JsonSerializer.
|
![]() |
MetadataPropertyHandling |
Specifies metadata property handling options for the
JsonSerializer.
|
![]() |
MissingMemberHandling |
Specifies missing member handling options for the
JsonSerializer.
|
![]() ![]() |
NullValueHandling |
Specifies null value handling options for the
JsonSerializer.
|
![]() |
ObjectCreationHandling |
Specifies how object creation is handled by the
JsonSerializer.
|
![]() ![]() |
PreserveReferencesHandling |
Specifies reference handling options for the
JsonSerializer. Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement
ISerializable.
|
![]() |
ReferenceLoopHandling |
Specifies reference loop handling options for the
JsonSerializer.
|
![]() |
Required |
Indicating whether a property is required.
|
![]() |
StringEscapeHandling |
Specifies how strings are escaped when writing JSON text.
|
![]() |
TypeNameAssemblyFormatHandling |
Indicates the method that will be used during deserialization for locating and loading assemblies.
|
![]() |
TypeNameHandling |
Specifies type name handling options for the
JsonSerializer.
|
![]() |
WriteState |
Specifies the state of the
JsonWriter.
|
圖片

筆者在弄了一段時間的百度 Ai 平台的SDK,封裝了OCR SDK,由於現在在找實習工作,所以有部分沒有弄完,有興趣可以添加筆者的微信免費獲取。微信在右側導航欄。
百度AI 識別文字,返回Json結果, 名字隨意.格式建議為 json,如果使用記事本保存,注意編碼格式是 utf-8,因為c# string默認為utf8,不然會亂碼。
{
"log_id": 3413661945235258919,
"direction": 0,
"words_result_num": 2,
"words_result": [
{
"vertexes_location": [
{
"y": 81,
"x": 51
},
{
"y": 81,
"x": 151
},
{
"y": 103,
"x": 151
},
{
"y": 103,
"x": 51
}
],
"probability": {
"variance": 0.0,
"average": 0.999861,
"min": 0.999627
},
"chars": [
{
"char": "今",
"location": {
"width": 17,
"top": 83,
"left": 60,
"height": 20
}
},
{
"char": "天",
"location": {
"width": 17,
"top": 83,
"left": 78,
"height": 20
}
},
{
"char": "除",
"location": {
"width": 12,
"top": 83,
"left": 103,
"height": 20
}
},
{
"char": "了",
"location": {
"width": 16,
"top": 83,
"left": 116,
"height": 20
}
},
{
"char": "皮",
"location": {
"width": 13,
"top": 83,
"left": 140,
"height": 20
}
}
],
"min_finegrained_vertexes_location": [
{
"y": 81,
"x": 51
},
{
"y": 81,
"x": 151
},
{
"y": 103,
"x": 151
},
{
"y": 103,
"x": 51
}
],
"finegrained_vertexes_location": [
{
"y": 81,
"x": 51
},
{
"y": 81,
"x": 71
},
{
"y": 81,
"x": 90
},
{
"y": 81,
"x": 110
},
{
"y": 81,
"x": 129
},
{
"y": 81,
"x": 149
},
{
"y": 81,
"x": 151
},
{
"y": 91,
"x": 151
},
{
"y": 100,
"x": 151
},
{
"y": 103,
"x": 151
},
{
"y": 103,
"x": 132
},
{
"y": 103,
"x": 112
},
{
"y": 103,
"x": 93
},
{
"y": 103,
"x": 73
},
{
"y": 103,
"x": 54
},
{
"y": 103,
"x": 51
},
{
"y": 93,
"x": 51
},
{
"y": 84,
"x": 51
}
],
"location": {
"width": 102,
"top": 81,
"left": 51,
"height": 24
},
"words": "今天除了皮"
},
{
"vertexes_location": [
{
"y": 109,
"x": 52
},
{
"y": 109,
"x": 152
},
{
"y": 130,
"x": 152
},
{
"y": 130,
"x": 52
}
],
"probability": {
"variance": 8E-05,
"average": 0.9907,
"min": 0.973259
},
"chars": [
{
"char": "又",
"location": {
"width": 16,
"top": 111,
"left": 61,
"height": 20
}
},
{
"char": "啥",
"location": {
"width": 12,
"top": 111,
"left": 85,
"height": 20
}
},
{
"char": "也",
"location": {
"width": 16,
"top": 111,
"left": 98,
"height": 20
}
},
{
"char": "沒",
"location": {
"width": 15,
"top": 111,
"left": 123,
"height": 20
}
},
{
"char": "干",
"location": {
"width": 13,
"top": 111,
"left": 141,
"height": 20
}
}
],
"min_finegrained_vertexes_location": [
{
"y": 109,
"x": 52
},
{
"y": 109,
"x": 152
},
{
"y": 130,
"x": 152
},
{
"y": 130,
"x": 52
}
],
"finegrained_vertexes_location": [
{
"y": 109,
"x": 52
},
{
"y": 109,
"x": 71
},
{
"y": 109,
"x": 91
},
{
"y": 109,
"x": 110
},
{
"y": 109,
"x": 129
},
{
"y": 109,
"x": 149
},
{
"y": 109,
"x": 152
},
{
"y": 119,
"x": 152
},
{
"y": 129,
"x": 152
},
{
"y": 130,
"x": 152
},
{
"y": 130,
"x": 133
},
{
"y": 130,
"x": 113
},
{
"y": 130,
"x": 94
},
{
"y": 130,
"x": 74
},
{
"y": 130,
"x": 55
},
{
"y": 130,
"x": 52
},
{
"y": 121,
"x": 52
},
{
"y": 111,
"x": 52
}
],
"location": {
"width": 102,
"top": 109,
"left": 52,
"height": 22
},
"words": "又啥也沒干"
}
],
"language": -1
}
對應的模型 ,將 cs 文件,名字 GeneralModel.cs
/// <summary> /// 通用文字識別(含位置版)返回結果 /// </summary> public class GeneralModel { /// <summary> /// 必選 /// 唯一的log id,用於問題定位 /// </summary> public long log_id { get; set; } /// <summary> /// 圖像方向,當detect_direction=true時存在。 /// 非必選 ///- -1:未定義, ///- 0:正向, ///- 1: 逆時針90度, ///- 2:逆時針180度, ///- 3:逆時針270度 /// </summary> public int direction { get; set; } /// <summary> /// 必選 /// 識別結果數,表示words_result的元素個數 /// </summary> public int words_result_num { get; set; } /// <summary> /// 檢測語言 默認值會返回 -1 /// </summary> public string language { get; set; } /// <summary> /// 定位和識別文字結果數組 /// </summary> public List<Words_result> words_result { get; set; } public class Words_result { /// <summary> /// 圖片中文字段四個頂點位置(矩形范圍) /// </summary> public List<XY> vertexes_Location { get; set; } /// <summary> /// 可選 /// 行置信度信息;如果輸入參數 probability = true 則輸出 /// </summary> public Probability probability { get; set; } /// <summary> /// 每個字 /// </summary> public List<Chars> chars { get; set; } /// <summary> /// 最小細粒度頂點坐標 /// </summary> public List<XY> min_finegrained_vertexes_location { get; set; } /// <summary> /// 細粒度頂點坐標,多邊形 /// </summary> public List<XY> finegrained_vertexes_location { get; set; } /// <summary> /// 文字在圖片中的相對位置 /// </summary> public Location location { get; set; } /// <summary> /// 識別出的文字 /// </summary> public string words { get; set; } /// <summary> /// 坐標 /// </summary> public class XY { public int x { get; set; } public int y { get; set; } } /// <summary> /// 行置信度 /// </summary> public class Probability { /// <summary> /// 行置信度平均值方差 /// </summary> public double variance { get; set; } /// <summary> /// 行置信度平均值 /// </summary> public double average { get; set; } /// <summary> /// 行置信度最小值 /// </summary> public double min { get; set; } } /// <summary> /// 單個文字 /// </summary> public class Chars { /// <summary> /// 識別的單個文字 /// </summary> public char chaR { get; set; } /// <summary> /// 該文字范圍(矩形) /// </summary> public Location location { get; set; } } } public class Location { public int left { get; set; } public int top { get; set; } public int width { get; set; } public int height { get; set; } } } }
可用控制台進行檢驗
static void Main(string[] args) { StreamReader streamReader = new StreamReader(System.IO.File.OpenRead(@"json文件位置")); string str = ""; string jsonstr; while ((jsonstr = streamReader.ReadLine()) != null) { str += jsonstr; } GeneralModel generalModel = JsonConvert.DeserializeObject<GeneralModel>(str); Console.WriteLine("圖片id:" + generalModel.log_id); Console.WriteLine("圖像方向:" + generalModel.direction); Console.WriteLine("檢測語言為:" + generalModel.language); Console.WriteLine("有幾個結果:" + generalModel.words_result_num); foreach (var item in generalModel.words_result) { Console.WriteLine("識別結果:" + Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(item.words))); foreach (var itemi in item.vertexes_Location) { Console.WriteLine("{x:" + itemi.x + ";y:" + itemi.y + "}"); } Console.WriteLine("Probability:可信度:" + "行置信度平均值" + item.probability.average + ";行置信度平均值方差:" + item.probability.variance + ";行置信度平均值最小值:" + item.probability.min); foreach (var itemi in item.chars) { Console.WriteLine(itemi.chaR); Console.WriteLine("位置: left:" + itemi.location.left + "; height: " + itemi.location.height + "top: " + itemi.location.top + "; width: " + itemi.location.width); } } Console.ReadKey();



Caution

