Newtonsoft.Json C# Json序列化和反序列化工具的使用、類型方法大全


 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一樣方便。

 


命名空間、類型、方法大全

本來想翻譯一下的,英語太差,算了。在常用的類型前面加粗吧

 

Classes
  Class Description
Public class DefaultJsonNameTable
The default JSON name table implementation.
Public class JsonArrayAttribute
Instructs the  JsonSerializer how to serialize the collection.
Public class JsonConstructorAttribute
Instructs the  JsonSerializer to use the specified constructor when deserializing that object.
Public class JsonContainerAttribute
Instructs the  JsonSerializer how to serialize the object.
Public classCode example JsonConvert
提供用於在.NET 和 Json之間互相轉等操作的方法
Public class JsonConverter
Converts an object to and from JSON.
Public class JsonConverter<T>
Converts an object to and from JSON.
Public class JsonConverterAttribute
Instructs the  JsonSerializer to use the specified  JsonConverter when serializing the member or class.
Public class JsonConverterCollection
Represents a collection of  JsonConverter.
Public class JsonDictionaryAttribute
Instructs the  JsonSerializer how to serialize the collection.
Public class JsonException
JSON序列化或反序列化過程中發生錯誤時引發的異常類型
Public class JsonExtensionDataAttribute
Instructs the  JsonSerializer to deserialize properties with no matching class member into the specified collection and write values during serialization.
Public class JsonIgnoreAttribute
Instructs the  JsonSerializer not to serialize the public field or public read/write property value.
Public class JsonNameTable
Base class for a table of atomized string objects.
Public class JsonObjectAttribute
Instructs the  JsonSerializer how to serialize the object.
Public class JsonPropertyAttribute
Instructs the  JsonSerializer to always serialize the member with the specified name.
Public class JsonReader
Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data.
Public class JsonReaderException
The exception thrown when an error occurs while reading JSON text.
Public class JsonRequiredAttribute
Instructs the  JsonSerializer to always serialize the member, and to require that the member has a value.
Public class JsonSerializationException
The exception thrown when an error occurs during JSON serialization or deserialization.
Public class JsonSerializer
Serializes and deserializes objects into and from the JSON format. The  JsonSerializer enables you to control how objects are encoded into JSON.
Public class JsonSerializerSettings
Specifies the settings on a  JsonSerializer object.
Public class JsonTextReader
Represents a reader that provides fast, non-cached, forward-only access to JSON text data.
Public class JsonTextWriter
Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
Public class JsonValidatingReader Obsolete.

Represents a reader that provides JsonSchema validation.

Caution note Caution
JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschemafor more details.
Public class JsonWriter
Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
Public class JsonWriterException
The exception thrown when an error occurs while writing JSON text.
Interfaces
  Interface Description
Public interface IArrayPool<T>
Provides an interface for using pooled arrays.
Public interface IJsonLineInfo
Provides an interface to enable a class to return line and position information.
Enumerations
  Enumeration Description
Public enumeration ConstructorHandling
Specifies how constructors are used when initializing objects during deserialization by the  JsonSerializer.
Public enumeration DateFormatHandling
Specifies how dates are formatted when writing JSON text.
Public enumeration DateParseHandling
Specifies how date formatted strings, e.g.  "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text.
Public enumeration DateTimeZoneHandling
Specifies how to treat the time value when converting between string and  DateTime.
Public enumerationCode example DefaultValueHandling
Specifies default value handling options for the  JsonSerializer.
Public enumeration FloatFormatHandling
Specifies float format handling options when writing special floating point numbers, e.g.  NaN, PositiveInfinity and  NegativeInfinity with  JsonWriter.
Public enumeration FloatParseHandling
Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
Public enumeration Formatting
Specifies formatting options for the  JsonTextWriter.
Protected enumeration JsonReader.State
Specifies the state of the reader.
Public enumeration JsonToken
Specifies the type of JSON token.
Public enumeration MemberSerialization
Specifies the member serialization options for the  JsonSerializer.
Public enumeration MetadataPropertyHandling
Specifies metadata property handling options for the  JsonSerializer.
Public enumeration MissingMemberHandling
Specifies missing member handling options for the  JsonSerializer.
Public enumerationCode example NullValueHandling
Specifies null value handling options for the  JsonSerializer.
Public enumeration ObjectCreationHandling
Specifies how object creation is handled by the  JsonSerializer.
Public enumerationCode example 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.
Public enumeration ReferenceLoopHandling
Specifies reference loop handling options for the  JsonSerializer.
Public enumeration Required
Indicating whether a property is required.
Public enumeration StringEscapeHandling
Specifies how strings are escaped when writing JSON text.
Public enumeration TypeNameAssemblyFormatHandling
Indicates the method that will be used during deserialization for locating and loading assemblies.
Public enumeration TypeNameHandling
Specifies type name handling options for the  JsonSerializer.
Public enumeration WriteState
Specifies the state of the  JsonWriter.
 

另外附上 百度AI 文字識別 Json 及其模型類

 圖片

筆者在弄了一段時間的百度 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();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM