From b15013e0095a07f8f39af47d55548c4899e3cb3a Mon Sep 17 00:00:00 2001 From: clovejunti Date: Wed, 29 May 2024 04:26:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8F=B3=E9=94=AE=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=88=E5=B1=95=E7=A4=BA=E5=BD=93=E5=89=8D=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=BD=93=E5=89=8D=E5=B9=B4=E5=BA=A6=E6=89=80=E6=9C=89?= =?UTF-8?q?=E8=AE=A1=E5=88=92=E7=9A=84=E5=88=97=E8=A1=A8=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=EF=BC=8C=E6=8F=90=E4=BE=9B=E6=8C=89=E9=92=AE=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E4=BF=9D=E5=85=BB=E3=80=81=E6=9F=A5=E7=9C=8B=E3=80=81=E6=89=93?= =?UTF-8?q?=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PlanController.cs | 24 + DeviceRepair.DataAccess/PlanAccess.cs | 59 + .../Device/DeviceAnnPlanView.cs | 15 + .../DeviceRepair.Models.csproj | 1 + .../Plan/DriveMaintencePlanInfo.cs | 5 + DeviceRepairAndOptimization.sln | 4 +- .../Biz/PlanManager.cs | 37 + .../DeviceRepairAndOptimization.csproj | 9 + .../page_MaintenanceView.Designer.cs | 12 +- .../Pages/Plan/pageDevicePlans.Designer.cs | 198 + .../Pages/Plan/pageDevicePlans.cs | 182 + .../Pages/Plan/pageDevicePlans.resx | 259 + .../Plan/page_MaintenancePlan.Designer.cs | 47 +- .../Pages/Plan/page_MaintenancePlan.cs | 59 +- .../Pages/Plan/page_MaintenancePlan.resx | 3 + .../ServiceRouteConstValue.cs | 5 + SqlSugarTest/App.config | 6 + SqlSugarTest/Form1.Designer.cs | 63 + SqlSugarTest/Form1.cs | 59 + SqlSugarTest/Form1.resx | 120 + SqlSugarTest/Program.cs | 22 + SqlSugarTest/Properties/AssemblyInfo.cs | 36 + SqlSugarTest/Properties/Resources.Designer.cs | 71 + SqlSugarTest/Properties/Resources.resx | 117 + SqlSugarTest/Properties/Settings.Designer.cs | 30 + SqlSugarTest/Properties/Settings.settings | 7 + SqlSugarTest/SqlSugarTest.csproj | 105 + .../bin/Debug/DeviceRepair.Models.dll | 3 + .../bin/Debug/DeviceRepair.Models.pdb | Bin 0 -> 486912 bytes SqlSugarTest/bin/Debug/DeviceRepair.Utils.dll | 3 + SqlSugarTest/bin/Debug/DeviceRepair.Utils.pdb | Bin 0 -> 56832 bytes .../bin/Debug/ICSharpCode.SharpZipLib.dll | 3 + .../bin/Debug/ICSharpCode.SharpZipLib.pdb | Bin 0 -> 96840 bytes .../bin/Debug/ICSharpCode.SharpZipLib.xml | 10331 +++++++++++++++ SqlSugarTest/bin/Debug/Newtonsoft.Json.dll | 3 + SqlSugarTest/bin/Debug/Newtonsoft.Json.xml | 10752 ++++++++++++++++ SqlSugarTest/bin/Debug/SqlSugar.dll | 3 + SqlSugarTest/bin/Debug/SqlSugarTest.exe | Bin 0 -> 11264 bytes .../bin/Debug/SqlSugarTest.exe.config | 14 + SqlSugarTest/bin/Debug/SqlSugarTest.pdb | Bin 0 -> 19968 bytes .../bin/Debug/SqlSugarTest.vshost.exe | Bin 0 -> 22696 bytes .../bin/Debug/SqlSugarTest.vshost.exe.config | 14 + .../Debug/SqlSugarTest.vshost.exe.manifest | 11 + ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 7375 bytes .../obj/Debug/SqlSugarTest.Form1.resources | Bin 0 -> 180 bytes ...qlSugarTest.Properties.Resources.resources | Bin 0 -> 180 bytes .../SqlSugarTest.csproj.FileListAbsolute.txt | 20 + ...SqlSugarTest.csproj.GenerateResource.Cache | Bin 0 -> 976 bytes ...qlSugarTest.csproj.SqlSugarTest.exe.config | 14 + ...rTest.csprojResolveAssemblyReference.cache | Bin 0 -> 36716 bytes SqlSugarTest/obj/Debug/SqlSugarTest.exe | Bin 0 -> 11264 bytes SqlSugarTest/obj/Debug/SqlSugarTest.pdb | Bin 0 -> 19968 bytes ...le_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs | 0 ...le_5937a670-0e60-4077-877b-f7221da3dda1.cs | 0 ...le_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs | 0 SqlSugarTest/packages.config | 4 + 56 files changed, 22685 insertions(+), 45 deletions(-) create mode 100644 DeviceRepair.Models/Device/DeviceAnnPlanView.cs create mode 100644 DeviceRepairAndOptimization/Pages/Plan/pageDevicePlans.Designer.cs create mode 100644 DeviceRepairAndOptimization/Pages/Plan/pageDevicePlans.cs create mode 100644 DeviceRepairAndOptimization/Pages/Plan/pageDevicePlans.resx create mode 100644 SqlSugarTest/App.config create mode 100644 SqlSugarTest/Form1.Designer.cs create mode 100644 SqlSugarTest/Form1.cs create mode 100644 SqlSugarTest/Form1.resx create mode 100644 SqlSugarTest/Program.cs create mode 100644 SqlSugarTest/Properties/AssemblyInfo.cs create mode 100644 SqlSugarTest/Properties/Resources.Designer.cs create mode 100644 SqlSugarTest/Properties/Resources.resx create mode 100644 SqlSugarTest/Properties/Settings.Designer.cs create mode 100644 SqlSugarTest/Properties/Settings.settings create mode 100644 SqlSugarTest/SqlSugarTest.csproj create mode 100644 SqlSugarTest/bin/Debug/DeviceRepair.Models.dll create mode 100644 SqlSugarTest/bin/Debug/DeviceRepair.Models.pdb create mode 100644 SqlSugarTest/bin/Debug/DeviceRepair.Utils.dll create mode 100644 SqlSugarTest/bin/Debug/DeviceRepair.Utils.pdb create mode 100644 SqlSugarTest/bin/Debug/ICSharpCode.SharpZipLib.dll create mode 100644 SqlSugarTest/bin/Debug/ICSharpCode.SharpZipLib.pdb create mode 100644 SqlSugarTest/bin/Debug/ICSharpCode.SharpZipLib.xml create mode 100644 SqlSugarTest/bin/Debug/Newtonsoft.Json.dll create mode 100644 SqlSugarTest/bin/Debug/Newtonsoft.Json.xml create mode 100644 SqlSugarTest/bin/Debug/SqlSugar.dll create mode 100644 SqlSugarTest/bin/Debug/SqlSugarTest.exe create mode 100644 SqlSugarTest/bin/Debug/SqlSugarTest.exe.config create mode 100644 SqlSugarTest/bin/Debug/SqlSugarTest.pdb create mode 100644 SqlSugarTest/bin/Debug/SqlSugarTest.vshost.exe create mode 100644 SqlSugarTest/bin/Debug/SqlSugarTest.vshost.exe.config create mode 100644 SqlSugarTest/bin/Debug/SqlSugarTest.vshost.exe.manifest create mode 100644 SqlSugarTest/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 SqlSugarTest/obj/Debug/SqlSugarTest.Form1.resources create mode 100644 SqlSugarTest/obj/Debug/SqlSugarTest.Properties.Resources.resources create mode 100644 SqlSugarTest/obj/Debug/SqlSugarTest.csproj.FileListAbsolute.txt create mode 100644 SqlSugarTest/obj/Debug/SqlSugarTest.csproj.GenerateResource.Cache create mode 100644 SqlSugarTest/obj/Debug/SqlSugarTest.csproj.SqlSugarTest.exe.config create mode 100644 SqlSugarTest/obj/Debug/SqlSugarTest.csprojResolveAssemblyReference.cache create mode 100644 SqlSugarTest/obj/Debug/SqlSugarTest.exe create mode 100644 SqlSugarTest/obj/Debug/SqlSugarTest.pdb create mode 100644 SqlSugarTest/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs create mode 100644 SqlSugarTest/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs create mode 100644 SqlSugarTest/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs create mode 100644 SqlSugarTest/packages.config diff --git a/DeviceRepair.Api/Controllers/PlanController.cs b/DeviceRepair.Api/Controllers/PlanController.cs index bb61065..817808c 100644 --- a/DeviceRepair.Api/Controllers/PlanController.cs +++ b/DeviceRepair.Api/Controllers/PlanController.cs @@ -227,5 +227,29 @@ namespace DeviceRepair.Api.Controllers } return apiResponseData; } + + /// + /// 获取设备在年度的全部保养信息 + /// + /// + /// + /// + [HttpGet] + [HttpAuthorize] + [Route("GetDeviceInformationPlans")] + public APIResponseData GetDeviceInformationPlans(int EquipmentAutoID,int Year) + { + APIResponseData apiResponseData = new APIResponseData { Code = -1, Message = $"获取数据失败!" }; + try + { + return PlanAccess.Instance.GetDeviceInformationPlans(EquipmentAutoID, Year); + } + catch (Exception ex) + { + apiResponseData.Code = -1; + apiResponseData.Message = ex.Message.ToString(); + } + return apiResponseData; + } } } diff --git a/DeviceRepair.DataAccess/PlanAccess.cs b/DeviceRepair.DataAccess/PlanAccess.cs index bd3dc97..fd758aa 100644 --- a/DeviceRepair.DataAccess/PlanAccess.cs +++ b/DeviceRepair.DataAccess/PlanAccess.cs @@ -1,5 +1,6 @@ using DeviceRepair.Models; using DeviceRepair.Models.Common; +using DeviceRepair.Models.Device; using DeviceRepair.Models.Enum; using DeviceRepair.Models.Plan; using SqlSugar; @@ -555,5 +556,63 @@ namespace DeviceRepair.DataAccess } return apiResponseData; } + + /// + /// 获取设备在年度的全部保养信息 + /// + /// + /// + /// + public APIResponseData GetDeviceInformationPlans(int EquipmentAutoID, int Year) + { + APIResponseData apiResponseData = new APIResponseData { Code = -1, Message = $"获取数据失败!" }; + if (EquipmentAutoID <= 0 || Year <= 0) + return new APIResponseData { Code = -1, Message = "传入的设备编号或年份参数出错!" }; + try + { + db.ChangeDatabase("main"); + + // 获取设备计划信息 + DeviceInformationInfo Dev = db.Queryable().First(x => x.AutoID == EquipmentAutoID); + + if (Dev == null) + throw new Exception($"编号为:{EquipmentAutoID} 的设备不存在!"); + + // 获取计划信息 + List plans = db.Queryable().Where(x => x.EquipmentID == EquipmentAutoID && x.MaintenanceYear == Year && SqlFunc.HasValue(x.MaintenanceType)).ToList(); + if ((plans?.Count ?? 0) == 0) + throw new Exception($"编号为:{EquipmentAutoID} 的设备计划为空!"); + + int[] pIds = plans.Select(x => x.AutoID).ToArray(); + + // 获取保养的记录信息 + List records = db.Queryable().Where(x => x.EquipmentPrimaryID == EquipmentAutoID && SqlFunc.ContainsArray(pIds, x.PlanPrimaryID)).ToList(); + + DeviceAnnPlanView devs = new DeviceAnnPlanView + { + Dev = Dev, + Plans = plans, + Records = records + }; + + if (Dev.MaintenanceFormVersion != 0) + devs.CurrentFormCode = db.Queryable().First(x => x.AutoID == Dev.MaintenanceFormVersion)?.VersionCode; + + apiResponseData.Code = 1; + apiResponseData.Message = ""; + apiResponseData.Data = devs; + } + catch (SqlSugarException e) + { + apiResponseData.Code = -1; + apiResponseData.Message = e.Message; + } + catch (Exception ex) + { + apiResponseData.Code = -1; + apiResponseData.Message = ex.Message; + } + return apiResponseData; + } } } diff --git a/DeviceRepair.Models/Device/DeviceAnnPlanView.cs b/DeviceRepair.Models/Device/DeviceAnnPlanView.cs new file mode 100644 index 0000000..4750d2c --- /dev/null +++ b/DeviceRepair.Models/Device/DeviceAnnPlanView.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; + +namespace DeviceRepair.Models.Device +{ + public class DeviceAnnPlanView + { + public DeviceInformationInfo Dev { get; set; } + + public List Plans { get; set; } + + public List Records { get; set; } + + public string CurrentFormCode { get; set; } + } +} diff --git a/DeviceRepair.Models/DeviceRepair.Models.csproj b/DeviceRepair.Models/DeviceRepair.Models.csproj index 201b7ac..da8e1e8 100644 --- a/DeviceRepair.Models/DeviceRepair.Models.csproj +++ b/DeviceRepair.Models/DeviceRepair.Models.csproj @@ -67,6 +67,7 @@ + diff --git a/DeviceRepair.Models/Plan/DriveMaintencePlanInfo.cs b/DeviceRepair.Models/Plan/DriveMaintencePlanInfo.cs index 9c3cdcd..2f2d47b 100644 --- a/DeviceRepair.Models/Plan/DriveMaintencePlanInfo.cs +++ b/DeviceRepair.Models/Plan/DriveMaintencePlanInfo.cs @@ -68,6 +68,11 @@ namespace DeviceRepair.Models public virtual string Remarks { get; set; } + [SugarColumn(IsIgnore = true)] + public string EquipmentDisplayID { get; set; } + + [SugarColumn(IsIgnore = true)] + public string FormDisplayCode { get; set; } #endregion diff --git a/DeviceRepairAndOptimization.sln b/DeviceRepairAndOptimization.sln index bc458eb..06daf13 100644 --- a/DeviceRepairAndOptimization.sln +++ b/DeviceRepairAndOptimization.sln @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9881a19fc763e478411309284ac4684d829f3c4af52f59e4843f61632bbbef76 -size 6025 +oid sha256:99e147d7a3262455accf060a1a62ea37f176e8ad8e315f687e352f725800fb2b +size 6598 diff --git a/DeviceRepairAndOptimization/Biz/PlanManager.cs b/DeviceRepairAndOptimization/Biz/PlanManager.cs index ea484ad..d8566a7 100644 --- a/DeviceRepairAndOptimization/Biz/PlanManager.cs +++ b/DeviceRepairAndOptimization/Biz/PlanManager.cs @@ -347,5 +347,42 @@ namespace DeviceRepairAndOptimization.Biz throw ex; } } + + /// + /// 获取设备在年度的全部保养信息 + /// + /// + /// + /// + public APIResponseData GetDeviceInformationPlans(int Year, int EquipmentAutoID) + { + APIResponseData apiResponseData = null; + try + { + switch (DeviceRepair.Utils.Config.Configurations.Properties.ConnType?.ToLower()) + { + case "api": + apiResponseData = ApiHelper.Instance.SendMessage( + new HttpItem + { + URL = $"{ServiceRouteConstValue.GetDeviceInformationPlans}?Year={Year}&EquipmentAutoID={EquipmentAutoID}", + Method = "Get", + ContentType = "application/json; charset=utf-8", + Postdata = JsonConvert.SerializeObject(new { Year, EquipmentAutoID }) + } + ); + break; + default: + apiResponseData = PlanAccess.Instance.GetDeviceInformationPlans(EquipmentAutoID, Year); + break; + } + + return apiResponseData; + } + catch (Exception ex) + { + throw ex; + } + } } } diff --git a/DeviceRepairAndOptimization/DeviceRepairAndOptimization.csproj b/DeviceRepairAndOptimization/DeviceRepairAndOptimization.csproj index 2b7660d..96ade07 100644 --- a/DeviceRepairAndOptimization/DeviceRepairAndOptimization.csproj +++ b/DeviceRepairAndOptimization/DeviceRepairAndOptimization.csproj @@ -483,6 +483,12 @@ page_XtraFormLog.cs + + Form + + + pageDevicePlans.cs + Form @@ -685,6 +691,9 @@ page_XtraFormLog.cs + + pageDevicePlans.cs + page_PlanEdit.cs diff --git a/DeviceRepairAndOptimization/Pages/Maintenance/page_MaintenanceView.Designer.cs b/DeviceRepairAndOptimization/Pages/Maintenance/page_MaintenanceView.Designer.cs index 512ef3c..57bb23a 100644 --- a/DeviceRepairAndOptimization/Pages/Maintenance/page_MaintenanceView.Designer.cs +++ b/DeviceRepairAndOptimization/Pages/Maintenance/page_MaintenanceView.Designer.cs @@ -74,7 +74,7 @@ this.tableLayoutPanel1.RowCount = 2; this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 48F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(1598, 999); + this.tableLayoutPanel1.Size = new System.Drawing.Size(1192, 983); this.tableLayoutPanel1.TabIndex = 0; // // gridControl1 @@ -83,7 +83,7 @@ this.gridControl1.Location = new System.Drawing.Point(3, 51); this.gridControl1.MainView = this.gridView1; this.gridControl1.Name = "gridControl1"; - this.gridControl1.Size = new System.Drawing.Size(1592, 945); + this.gridControl1.Size = new System.Drawing.Size(1186, 929); this.gridControl1.TabIndex = 1; this.gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { this.gridView1}); @@ -223,7 +223,7 @@ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel2.Size = new System.Drawing.Size(1598, 48); + this.tableLayoutPanel2.Size = new System.Drawing.Size(1192, 48); this.tableLayoutPanel2.TabIndex = 2; // // stackPanel1 @@ -234,7 +234,7 @@ this.stackPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.stackPanel1.LabelVertAlignment = DevExpress.Utils.Layout.LabelVertAlignment.Center; this.stackPanel1.LayoutDirection = DevExpress.Utils.Layout.StackPanelLayoutDirection.RightToLeft; - this.stackPanel1.Location = new System.Drawing.Point(1148, 0); + this.stackPanel1.Location = new System.Drawing.Point(742, 0); this.stackPanel1.Margin = new System.Windows.Forms.Padding(0); this.stackPanel1.Name = "stackPanel1"; this.stackPanel1.Size = new System.Drawing.Size(450, 48); @@ -275,7 +275,7 @@ this.stackPanel2.Location = new System.Drawing.Point(0, 0); this.stackPanel2.Margin = new System.Windows.Forms.Padding(0); this.stackPanel2.Name = "stackPanel2"; - this.stackPanel2.Size = new System.Drawing.Size(1148, 48); + this.stackPanel2.Size = new System.Drawing.Size(742, 48); this.stackPanel2.TabIndex = 1; // // btn_DriveMaintenanceEdit @@ -343,7 +343,7 @@ // page_MaintenanceView // this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; - this.ClientSize = new System.Drawing.Size(1598, 999); + this.ClientSize = new System.Drawing.Size(1192, 983); this.Controls.Add(this.tableLayoutPanel1); this.Name = "page_MaintenanceView"; this.Text = "page_MaintenanceView"; diff --git a/DeviceRepairAndOptimization/Pages/Plan/pageDevicePlans.Designer.cs b/DeviceRepairAndOptimization/Pages/Plan/pageDevicePlans.Designer.cs new file mode 100644 index 0000000..0cdb483 --- /dev/null +++ b/DeviceRepairAndOptimization/Pages/Plan/pageDevicePlans.Designer.cs @@ -0,0 +1,198 @@ +namespace DeviceRepairAndOptimization.Pages.Plan +{ + partial class pageDevicePlans + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions1 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(pageDevicePlans)); + DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject1 = new DevExpress.Utils.SerializableAppearanceObject(); + DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject2 = new DevExpress.Utils.SerializableAppearanceObject(); + DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject3 = new DevExpress.Utils.SerializableAppearanceObject(); + DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject4 = new DevExpress.Utils.SerializableAppearanceObject(); + DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions2 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions(); + DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject5 = new DevExpress.Utils.SerializableAppearanceObject(); + DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject6 = new DevExpress.Utils.SerializableAppearanceObject(); + DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject7 = new DevExpress.Utils.SerializableAppearanceObject(); + DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject8 = new DevExpress.Utils.SerializableAppearanceObject(); + DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions3 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions(); + DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject9 = new DevExpress.Utils.SerializableAppearanceObject(); + DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject10 = new DevExpress.Utils.SerializableAppearanceObject(); + DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject11 = new DevExpress.Utils.SerializableAppearanceObject(); + DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject12 = new DevExpress.Utils.SerializableAppearanceObject(); + DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions4 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions(); + DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject13 = new DevExpress.Utils.SerializableAppearanceObject(); + DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject14 = new DevExpress.Utils.SerializableAppearanceObject(); + DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject15 = new DevExpress.Utils.SerializableAppearanceObject(); + DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject16 = new DevExpress.Utils.SerializableAppearanceObject(); + this.gridControl1 = new DevExpress.XtraGrid.GridControl(); + this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView(); + this.gcEquipmentID = new DevExpress.XtraGrid.Columns.GridColumn(); + this.gcMonth = new DevExpress.XtraGrid.Columns.GridColumn(); + this.gcMaintenanceType = new DevExpress.XtraGrid.Columns.GridColumn(); + this.gcFormVersionCode = new DevExpress.XtraGrid.Columns.GridColumn(); + this.gcCompleteDate = new DevExpress.XtraGrid.Columns.GridColumn(); + this.gcOperation = new DevExpress.XtraGrid.Columns.GridColumn(); + this.repositoryItemButtonEdit1 = new DevExpress.XtraEditors.Repository.RepositoryItemButtonEdit(); + ((System.ComponentModel.ISupportInitialize)(this.gridControl1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.repositoryItemButtonEdit1)).BeginInit(); + this.SuspendLayout(); + // + // gridControl1 + // + this.gridControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.gridControl1.Location = new System.Drawing.Point(0, 0); + this.gridControl1.MainView = this.gridView1; + this.gridControl1.Name = "gridControl1"; + this.gridControl1.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { + this.repositoryItemButtonEdit1}); + this.gridControl1.Size = new System.Drawing.Size(693, 384); + this.gridControl1.TabIndex = 0; + this.gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { + this.gridView1}); + // + // gridView1 + // + this.gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { + this.gcEquipmentID, + this.gcMonth, + this.gcMaintenanceType, + this.gcFormVersionCode, + this.gcCompleteDate, + this.gcOperation}); + this.gridView1.GridControl = this.gridControl1; + this.gridView1.Name = "gridView1"; + this.gridView1.OptionsView.ShowGroupPanel = false; + // + // gcEquipmentID + // + this.gcEquipmentID.Caption = "设备编号"; + this.gcEquipmentID.FieldName = "EquipmentDisplayID"; + this.gcEquipmentID.Name = "gcEquipmentID"; + this.gcEquipmentID.OptionsColumn.AllowEdit = false; + this.gcEquipmentID.ToolTip = "设备编号"; + this.gcEquipmentID.Visible = true; + this.gcEquipmentID.VisibleIndex = 0; + // + // gcMonth + // + this.gcMonth.Caption = "月份"; + this.gcMonth.FieldName = "MaintenanceMonth"; + this.gcMonth.Name = "gcMonth"; + this.gcMonth.OptionsColumn.AllowEdit = false; + this.gcMonth.ToolTip = "月份"; + this.gcMonth.Visible = true; + this.gcMonth.VisibleIndex = 1; + // + // gcMaintenanceType + // + this.gcMaintenanceType.Caption = "保养类型"; + this.gcMaintenanceType.FieldName = "MaintenanceType"; + this.gcMaintenanceType.Name = "gcMaintenanceType"; + this.gcMaintenanceType.OptionsColumn.AllowEdit = false; + this.gcMaintenanceType.ToolTip = "保养类型"; + this.gcMaintenanceType.Visible = true; + this.gcMaintenanceType.VisibleIndex = 2; + // + // gcFormVersionCode + // + this.gcFormVersionCode.Caption = "点检表编号"; + this.gcFormVersionCode.FieldName = "FormDisplayCode"; + this.gcFormVersionCode.Name = "gcFormVersionCode"; + this.gcFormVersionCode.OptionsColumn.AllowEdit = false; + this.gcFormVersionCode.ToolTip = "点检表编号"; + this.gcFormVersionCode.Visible = true; + this.gcFormVersionCode.VisibleIndex = 3; + // + // gcCompleteDate + // + this.gcCompleteDate.Caption = "完成时间"; + this.gcCompleteDate.FieldName = "CompleteDate"; + this.gcCompleteDate.Name = "gcCompleteDate"; + this.gcCompleteDate.OptionsColumn.AllowEdit = false; + this.gcCompleteDate.ToolTip = "完成时间"; + this.gcCompleteDate.Visible = true; + this.gcCompleteDate.VisibleIndex = 4; + // + // gcOperation + // + this.gcOperation.Caption = "操作"; + this.gcOperation.ColumnEdit = this.repositoryItemButtonEdit1; + this.gcOperation.Name = "gcOperation"; + this.gcOperation.Visible = true; + this.gcOperation.VisibleIndex = 5; + // + // repositoryItemButtonEdit1 + // + this.repositoryItemButtonEdit1.AutoHeight = false; + editorButtonImageOptions1.Image = ((System.Drawing.Image)(resources.GetObject("editorButtonImageOptions1.Image"))); + editorButtonImageOptions2.Image = ((System.Drawing.Image)(resources.GetObject("editorButtonImageOptions2.Image"))); + editorButtonImageOptions3.Image = ((System.Drawing.Image)(resources.GetObject("editorButtonImageOptions3.Image"))); + editorButtonImageOptions4.Image = ((System.Drawing.Image)(resources.GetObject("editorButtonImageOptions4.Image"))); + this.repositoryItemButtonEdit1.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "设备保养", -1, true, true, false, editorButtonImageOptions1, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject1, serializableAppearanceObject2, serializableAppearanceObject3, serializableAppearanceObject4, "设备保养", null, null, DevExpress.Utils.ToolTipAnchor.Default), + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "保养记录修改", -1, true, true, false, editorButtonImageOptions2, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject5, serializableAppearanceObject6, serializableAppearanceObject7, serializableAppearanceObject8, "保养记录修改", null, null, DevExpress.Utils.ToolTipAnchor.Default), + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "查看", -1, true, true, false, editorButtonImageOptions3, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject9, serializableAppearanceObject10, serializableAppearanceObject11, serializableAppearanceObject12, "查看", null, null, DevExpress.Utils.ToolTipAnchor.Default), + new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "打印", -1, true, true, false, editorButtonImageOptions4, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject13, serializableAppearanceObject14, serializableAppearanceObject15, serializableAppearanceObject16, "打印", null, null, DevExpress.Utils.ToolTipAnchor.Default)}); + this.repositoryItemButtonEdit1.ContextImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("repositoryItemButtonEdit1.ContextImageOptions.Image"))); + this.repositoryItemButtonEdit1.Name = "repositoryItemButtonEdit1"; + this.repositoryItemButtonEdit1.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.HideTextEditor; + this.repositoryItemButtonEdit1.ButtonClick += new DevExpress.XtraEditors.Controls.ButtonPressedEventHandler(this.repositoryItemButtonEdit1_Click); + // + // pageDevicePlans + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(693, 384); + this.Controls.Add(this.gridControl1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.IconOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("pageDevicePlans.IconOptions.LargeImage"))); + this.MaximizeBox = false; + this.Name = "pageDevicePlans"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "设备计划详情"; + ((System.ComponentModel.ISupportInitialize)(this.gridControl1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.repositoryItemButtonEdit1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private DevExpress.XtraGrid.GridControl gridControl1; + private DevExpress.XtraGrid.Views.Grid.GridView gridView1; + private DevExpress.XtraGrid.Columns.GridColumn gcEquipmentID; + private DevExpress.XtraGrid.Columns.GridColumn gcMonth; + private DevExpress.XtraGrid.Columns.GridColumn gcMaintenanceType; + private DevExpress.XtraGrid.Columns.GridColumn gcFormVersionCode; + private DevExpress.XtraGrid.Columns.GridColumn gcCompleteDate; + private DevExpress.XtraGrid.Columns.GridColumn gcOperation; + private DevExpress.XtraEditors.Repository.RepositoryItemButtonEdit repositoryItemButtonEdit1; + } +} \ No newline at end of file diff --git a/DeviceRepairAndOptimization/Pages/Plan/pageDevicePlans.cs b/DeviceRepairAndOptimization/Pages/Plan/pageDevicePlans.cs new file mode 100644 index 0000000..2605ef8 --- /dev/null +++ b/DeviceRepairAndOptimization/Pages/Plan/pageDevicePlans.cs @@ -0,0 +1,182 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; +using DevExpress.XtraEditors; +using DeviceRepair.Models; +using DeviceRepair.Utils; +using DeviceRepairAndOptimization.Common; +using DeviceRepair.Models.Device; +using DeviceRepairAndOptimization.Pages.Maintenance; +using DeviceRepairAndOptimization.Pages.DriveMaintenance; + +namespace DeviceRepairAndOptimization.Pages.Plan +{ + public partial class pageDevicePlans : XtraForm + { + int m_SelectedCurrentRowIndex = 0; + int CurrentEquipmentID = 0; + int CurrentYear = 0; + DeviceAnnPlanView CurrentData = null; + + public pageDevicePlans(int EquipmentID, int Year) + { + InitializeComponent(); + + CurrentEquipmentID = EquipmentID; + CurrentYear = Year; + + this.Load += PageDevicePlans_Load; + } + + private void PageDevicePlans_Load(object sender, EventArgs ee) + { + try + { + APIResponseData apiResponseData = Biz.PlanManager.Instance.GetDeviceInformationPlans(CurrentYear, CurrentEquipmentID); + if (!apiResponseData.IsSuccess) + throw new Exception(apiResponseData.Message); + + CurrentData = apiResponseData.ToDeserializeObject(); + + foreach (DriveMaintencePlanInfo item in CurrentData.Plans) + { + MaintenanceRecordInfo record = CurrentData.Records?.FirstOrDefault(x => x.PlanPrimaryID == item.AutoID); + item.CompleteDate = record?.CreateDate ?? null; + item.EquipmentDisplayID = CurrentData.Dev.EquipmentID; + item.FormDisplayCode = CurrentData.CurrentFormCode; + } + + gridView1.IndicatorWidth = 50; + gridControl1.DataSource = CurrentData.Plans; + gridView1.BestFitColumns(); + + // 自增长行号 + gridView1.CustomDrawRowIndicator += (s, e) => + { + if (e.Info.IsRowIndicator && e.RowHandle >= 0) + { + e.Info.DisplayText = (e.RowHandle + 1).ToString(); + e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; + e.Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; + SizeF size = e.Graphics.MeasureString((e.RowHandle + 1).ToString(), e.Appearance.Font); + } + }; + } + catch (Exception ex) + { + XtraMessageBoxHelper.Error(ex.Message); + this.Close(); + } + + } + + + private void repositoryItemButtonEdit1_Click(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e) + { + try + { + + + m_SelectedCurrentRowIndex = gridView1.FocusedRowHandle; + if (!gridView1.IsValidRowHandle(m_SelectedCurrentRowIndex)) + { + throw new Exception("请先选择计划所在行!"); + } + + DriveMaintencePlanInfo CurrentSelectRowData = gridView1.GetRow(m_SelectedCurrentRowIndex) as DriveMaintencePlanInfo; + if (CurrentSelectRowData == null) + { + throw new Exception("请先选择计划所在行!"); + } + + if (e.Button.Caption.Equals("查看")) + { + if (!GlobalInfo.HasRole("BIZ_MAINTENANCE_LOG_VIEW")) + { + throw new Exception($"当前账号缺少此操作的权限"); + } + + if (CurrentSelectRowData.CompleteDate.HasValue) + { + MaintenanceRecordInfo record = CurrentData.Records?.FirstOrDefault(x => x.PlanPrimaryID == CurrentSelectRowData.AutoID); + if (record == null) + throw new Exception("未查询到设备保养记录信息,请重试!"); + page_MaintenancePdfView view = new page_MaintenancePdfView("查看", new int[] { record.AutoID }, false); + view.ShowDialog(); + } + else + { + throw new Exception("当前计划不存在保养信息!"); + } + } + else if (e.Button.Caption.Equals("保养记录修改")) + { + if (!GlobalInfo.HasRole("BIZ_MAINTENANCE_EDIT")) + { + throw new Exception($"当前账号缺少此操作的权限"); + } + MaintenanceRecordInfo record = CurrentData.Records?.FirstOrDefault(x => x.PlanPrimaryID == CurrentSelectRowData.AutoID); + if (record == null) + throw new Exception("未查询到设备保养记录信息,请重试!"); + page_DriveMaintenance view = new page_DriveMaintenance(CurrentData.Dev, CurrentSelectRowData.AutoID, record.AutoID, true); + + if (view.ShowDialog() == DialogResult.OK) + { + XtraMessageBoxHelper.Info("操作成功!"); + } + else + { + if (!string.IsNullOrWhiteSpace(view.apiResponseData.Message)) + throw new Exception(view.apiResponseData.Message); + } + } + else if (e.Button.Caption.Equals("设备保养")) + { + if (CurrentSelectRowData.CompleteDate.HasValue) + { + throw new Exception("当前计划已保养!"); + } + + if (!GlobalInfo.HasRole("BIZ_MAINTENANCE_ADD")) + { + throw new Exception($"当前账号缺少此操作的权限"); + } + + page_DriveMaintenance view = new page_DriveMaintenance(CurrentData.Dev, CurrentSelectRowData.AutoID); + if (view.ShowDialog() == DialogResult.OK) + { + XtraMessageBoxHelper.Info("操作成功!"); + } + else + { + if (!string.IsNullOrWhiteSpace(view.apiResponseData.Message)) + throw new Exception(view.apiResponseData.Message); + } + } + else if (e.Button.Caption.Equals("打印")) + { + if (CurrentSelectRowData.CompleteDate.HasValue) + { + MaintenanceRecordInfo record = CurrentData.Records?.FirstOrDefault(x => x.PlanPrimaryID == CurrentSelectRowData.AutoID); + page_MaintenancePdfView view = new page_MaintenancePdfView("打印", new int[] { record.AutoID }, true); + view.ShowDialog(); + } + else + { + throw new Exception("当前计划不存在保养信息!"); + } + } + } + catch (Exception ex) + { + XtraMessageBoxHelper.Error(ex.Message); + } + } + } +} \ No newline at end of file diff --git a/DeviceRepairAndOptimization/Pages/Plan/pageDevicePlans.resx b/DeviceRepairAndOptimization/Pages/Plan/pageDevicePlans.resx new file mode 100644 index 0000000..ec2f37d --- /dev/null +++ b/DeviceRepairAndOptimization/Pages/Plan/pageDevicePlans.resx @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABF0RVh0VGl0 + bGUARmlsbDtDb2xvcjucN7beAAACeElEQVQ4T53SXUhTYRgH8DOdOtM2l25T22pifuTXamyGYiYbmYJe + tCBByEKzxEClqI0Kpwv6UJHQZkaEXVQi0YgUwgW6QCgsCm+CiEzqwlIkutAo5v49z9rWYl31wI/3nPO8 + z59z9k7gcnfvE9yOP6hEzO2oonvGz6uESVoB/MVfE2fNfoNmLXp2a/SuMxVND22mEWpFE9HEORP1Ca3/ + DHCdLPff9JRr9H1lakz1N63Du4ixtrI71I4lIt7jOvV7X0QAFb+y+NZR4/EnV46gW6/Ep9lRrH9fwO1j + xaPU20D4baJIqIIBPBwzWK9rddkseHl/GI+6mmHNlWHlRSO+LUzBaS9Yu+jRfnF41DfqOpOlgZlQgLjP + kn9ieqAF6z+W4F37iLUPA1h+Xo/392rxqqsE8+6r6LVlwzquQvsDxRjNxPBgMEByzZK3srr8Fr6fX2nY + iaUZC96N7MWz0zq8dhgw0pDnO1yk7Gi4KUPzXZlXVxOXHB4Q22nKOO+5bsfqvBOL09V4M1SG6ZYszNoK + 4TyQ6TuYJW+jfUqzXYK6oXjkVopTeTAYwD9MorVUc2HcugNz/UY8PrQVM+056K3W+Go0iTycSGT5zVHY + YxXPBe5FwQAuDpG2G9IuDVepMdmYAUeFymdSSDro+cZAP0FVKTyVFwv76ZqPNvQGgqN0My+8Kam1SHXZ + viv9c4ksJjRcmxLHfT7GeOL/X/CDUIDdkCrYjWl8yZv4zOWBNcosjRbC8VC4YHEyDyQQ/j4+axlJIhy2 + iaQQBVESFUnzBwRSIpoknfC3acgWoiUZJJNsI9nhARFNkkO2kzxSQAqJjuwkemIIBfw/CL8AsV1fTjrD + P6kAAAAASUVORK5CYII= + + + + + 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 + P6kAAAAASUVORK5CYII= + + + + + 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 + + + \ No newline at end of file diff --git a/DeviceRepairAndOptimization/Pages/Plan/page_MaintenancePlan.Designer.cs b/DeviceRepairAndOptimization/Pages/Plan/page_MaintenancePlan.Designer.cs index 0c2d873..633b378 100644 --- a/DeviceRepairAndOptimization/Pages/Plan/page_MaintenancePlan.Designer.cs +++ b/DeviceRepairAndOptimization/Pages/Plan/page_MaintenancePlan.Designer.cs @@ -29,6 +29,7 @@ namespace DeviceRepairAndOptimization.Pages /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions1 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions(); DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject1 = new DevExpress.Utils.SerializableAppearanceObject(); @@ -72,6 +73,8 @@ namespace DeviceRepairAndOptimization.Pages this.colChangeUserName = new DevExpress.XtraGrid.Columns.GridColumn(); this.colChangeDate = new DevExpress.XtraGrid.Columns.GridColumn(); this.titleDescription = new DevExpress.XtraGrid.Columns.GridColumn(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.splashScreenManager1 = new DevExpress.XtraSplashScreen.SplashScreenManager(this, typeof(global::DeviceRepairAndOptimization.frmWaiting), true, true); flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); flowLayoutPanel2 = new System.Windows.Forms.FlowLayoutPanel(); @@ -87,6 +90,7 @@ namespace DeviceRepairAndOptimization.Pages this.tableLayoutPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.gridControl)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit(); + this.contextMenuStrip1.SuspendLayout(); this.SuspendLayout(); // // flowLayoutPanel1 @@ -95,16 +99,16 @@ namespace DeviceRepairAndOptimization.Pages flowLayoutPanel1.Controls.Add(this.EditSearch); flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft; - flowLayoutPanel1.Location = new System.Drawing.Point(1231, 0); + flowLayoutPanel1.Location = new System.Drawing.Point(798, 0); flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); flowLayoutPanel1.Name = "flowLayoutPanel1"; - flowLayoutPanel1.Size = new System.Drawing.Size(608, 48); + flowLayoutPanel1.Size = new System.Drawing.Size(394, 48); flowLayoutPanel1.TabIndex = 1; // // btn_Filter // this.btn_Filter.Anchor = System.Windows.Forms.AnchorStyles.Right; - this.btn_Filter.Location = new System.Drawing.Point(548, 9); + this.btn_Filter.Location = new System.Drawing.Point(334, 9); this.btn_Filter.Name = "btn_Filter"; this.btn_Filter.Size = new System.Drawing.Size(57, 26); this.btn_Filter.TabIndex = 10; @@ -113,7 +117,7 @@ namespace DeviceRepairAndOptimization.Pages // // EditSearch // - this.EditSearch.Location = new System.Drawing.Point(240, 7); + this.EditSearch.Location = new System.Drawing.Point(26, 7); this.EditSearch.Margin = new System.Windows.Forms.Padding(5, 7, 5, 7); this.EditSearch.Name = "EditSearch"; this.EditSearch.Properties.Appearance.Font = new System.Drawing.Font("Verdana", 10F); @@ -137,7 +141,7 @@ namespace DeviceRepairAndOptimization.Pages flowLayoutPanel2.Location = new System.Drawing.Point(0, 0); flowLayoutPanel2.Margin = new System.Windows.Forms.Padding(0); flowLayoutPanel2.Name = "flowLayoutPanel2"; - flowLayoutPanel2.Size = new System.Drawing.Size(481, 45); + flowLayoutPanel2.Size = new System.Drawing.Size(393, 45); flowLayoutPanel2.TabIndex = 3; // // btn_add @@ -226,18 +230,18 @@ namespace DeviceRepairAndOptimization.Pages tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); tableLayoutPanel2.Controls.Add(this.EditYear, 1, 0); tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - tableLayoutPanel2.Location = new System.Drawing.Point(609, 3); + tableLayoutPanel2.Location = new System.Drawing.Point(396, 3); tableLayoutPanel2.Name = "tableLayoutPanel2"; tableLayoutPanel2.RowCount = 1; tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - tableLayoutPanel2.Size = new System.Drawing.Size(619, 42); + tableLayoutPanel2.Size = new System.Drawing.Size(399, 42); tableLayoutPanel2.TabIndex = 4; // // EditYear // this.EditYear.Dock = System.Windows.Forms.DockStyle.Fill; this.EditYear.EditValue = null; - this.EditYear.Location = new System.Drawing.Point(187, 3); + this.EditYear.Location = new System.Drawing.Point(77, 3); this.EditYear.Name = "EditYear"; this.EditYear.Properties.AutoHeight = false; this.EditYear.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { @@ -261,7 +265,7 @@ namespace DeviceRepairAndOptimization.Pages this.tb_pnl_Content.RowCount = 2; this.tb_pnl_Content.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 48F)); this.tb_pnl_Content.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tb_pnl_Content.Size = new System.Drawing.Size(1839, 885); + this.tb_pnl_Content.Size = new System.Drawing.Size(1192, 931); this.tb_pnl_Content.TabIndex = 0; // // panel1 @@ -272,7 +276,7 @@ namespace DeviceRepairAndOptimization.Pages this.panel1.Location = new System.Drawing.Point(0, 0); this.panel1.Margin = new System.Windows.Forms.Padding(0); this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(1839, 48); + this.panel1.Size = new System.Drawing.Size(1192, 48); this.panel1.TabIndex = 0; // // tableLayoutPanel1 @@ -290,7 +294,7 @@ namespace DeviceRepairAndOptimization.Pages this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.RowCount = 1; this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(1839, 48); + this.tableLayoutPanel1.Size = new System.Drawing.Size(1192, 48); this.tableLayoutPanel1.TabIndex = 1; // // gridControl @@ -299,7 +303,7 @@ namespace DeviceRepairAndOptimization.Pages this.gridControl.Location = new System.Drawing.Point(3, 51); this.gridControl.MainView = this.gridView1; this.gridControl.Name = "gridControl"; - this.gridControl.Size = new System.Drawing.Size(1833, 831); + this.gridControl.Size = new System.Drawing.Size(1186, 877); this.gridControl.TabIndex = 1; this.gridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { this.gridView1}); @@ -518,6 +522,20 @@ namespace DeviceRepairAndOptimization.Pages this.titleDescription.Visible = true; this.titleDescription.VisibleIndex = 20; // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItem1}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(173, 26); + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(172, 22); + this.toolStripMenuItem1.Text = "查看设备保养详情"; + this.toolStripMenuItem1.Click += new System.EventHandler(this.toolStripMenuItem1_Click); + // // splashScreenManager1 // this.splashScreenManager1.ClosingDelay = 500; @@ -525,7 +543,7 @@ namespace DeviceRepairAndOptimization.Pages // page_MaintenancePlan // this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; - this.ClientSize = new System.Drawing.Size(1839, 885); + this.ClientSize = new System.Drawing.Size(1192, 931); this.Controls.Add(this.tb_pnl_Content); this.DoubleBuffered = true; this.Name = "page_MaintenancePlan"; @@ -542,6 +560,7 @@ namespace DeviceRepairAndOptimization.Pages this.tableLayoutPanel1.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.gridControl)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit(); + this.contextMenuStrip1.ResumeLayout(false); this.ResumeLayout(false); } @@ -583,5 +602,7 @@ namespace DeviceRepairAndOptimization.Pages private DevExpress.XtraGrid.Columns.GridColumn colChangeDate; private DevExpress.XtraGrid.Columns.GridColumn titleVersionCode; private DevExpress.XtraSplashScreen.SplashScreenManager splashScreenManager1; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; } } \ No newline at end of file diff --git a/DeviceRepairAndOptimization/Pages/Plan/page_MaintenancePlan.cs b/DeviceRepairAndOptimization/Pages/Plan/page_MaintenancePlan.cs index b350cd3..c2da5ec 100644 --- a/DeviceRepairAndOptimization/Pages/Plan/page_MaintenancePlan.cs +++ b/DeviceRepairAndOptimization/Pages/Plan/page_MaintenancePlan.cs @@ -23,6 +23,8 @@ namespace DeviceRepairAndOptimization.Pages { public List Datas { get; set; } + AnnualMaintenancePlan CurrentModel; + #region 函数 public page_MaintenancePlan() @@ -71,7 +73,6 @@ namespace DeviceRepairAndOptimization.Pages } } - #endregion #region 方法 @@ -93,28 +94,17 @@ namespace DeviceRepairAndOptimization.Pages gridControl.DataSource = Datas.Where(x => x.MaintenanceYear == Years && (x.DisplayEquipmentID == EditSearch.Text || x.EquipmentName.Contains(EditSearch.Text)))?.ToList(); } - //List statusArray = new List(); - //List Items = gridControl.DataSource as List; - //foreach (AnnualMaintenancePlan item in Items) - //{ - // PropertyInfo[] preps = item.GetType().GetProperties(); - // foreach (PropertyInfo prep in preps) - // { - // if (prep.PropertyType == typeof(EnumPlanCompleteStatus)) - // { - // EnumPlanCompleteStatus epcs = (EnumPlanCompleteStatus)prep.GetValue(item, null); - // statusArray.Add(epcs); - // } - // } - //} + gridView1.RowCellClick += GridView1_RowCellClick; + } - //int CurrentCount = statusArray.Where(x => x == EnumPlanCompleteStatus.Current).Count(); - //int CompleteCount = statusArray.Where(x => x == EnumPlanCompleteStatus.Complete).Count(); - //int FutureCount = statusArray.Where(x => x == EnumPlanCompleteStatus.Future).Count(); - //int TimeOutCount = statusArray.Where(x => x == EnumPlanCompleteStatus.TimeOut).Count(); - //int TotalCount = statusArray.Count(); - - //this.Tag = $"全年欲保养数:{TotalCount}当月待保养数:{ CurrentCount}全年已完成:{CompleteCount}已超时数:{TimeOutCount}全年待完成数:{CurrentCount + FutureCount}"; + private void GridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e) + { + if (e.Button == MouseButtons.Right) + { + CurrentModel = gridView1.GetRow(e.RowHandle) as AnnualMaintenancePlan; + contextMenuStrip1.Show(gridControl, e.Location); + return; + } } #endregion @@ -146,8 +136,6 @@ namespace DeviceRepairAndOptimization.Pages } } - #endregion - /// /// 导入 /// @@ -411,5 +399,28 @@ namespace DeviceRepairAndOptimization.Pages { InitializeGridData(); } + + #endregion + + /// + /// 设备年度计划详情 + /// + /// + /// + private void toolStripMenuItem1_Click(object sender, EventArgs e) + { + try + { + if (CurrentModel == null) + throw new Exception("请选中要操作的设备数据行!"); + + (new pageDevicePlans(CurrentModel.EquipmentID,CurrentModel.MaintenanceYear)).ShowDialog(); + + } + catch (Exception ex) + { + XtraMessageBoxHelper.Error(ex.Message); + } + } } } \ No newline at end of file diff --git a/DeviceRepairAndOptimization/Pages/Plan/page_MaintenancePlan.resx b/DeviceRepairAndOptimization/Pages/Plan/page_MaintenancePlan.resx index a1b2683..6e8623b 100644 --- a/DeviceRepairAndOptimization/Pages/Plan/page_MaintenancePlan.resx +++ b/DeviceRepairAndOptimization/Pages/Plan/page_MaintenancePlan.resx @@ -221,6 +221,9 @@ False + + 205, 17 + 49 diff --git a/DeviceRepairAndOptimization/ServiceRouteConstValue.cs b/DeviceRepairAndOptimization/ServiceRouteConstValue.cs index fda7908..2b261ad 100644 --- a/DeviceRepairAndOptimization/ServiceRouteConstValue.cs +++ b/DeviceRepairAndOptimization/ServiceRouteConstValue.cs @@ -158,6 +158,11 @@ /// public const string GetCurrentYearPlanSchedule = "Api/Plan/GetCurrentYearPlanSchedule"; + /// + /// 获取设备在年度的全部保养信息 + /// + public const string GetDeviceInformationPlans = "Api/Plan/GetDeviceInformationPlans"; + #endregion #region 设备信息 diff --git a/SqlSugarTest/App.config b/SqlSugarTest/App.config new file mode 100644 index 0000000..88fa402 --- /dev/null +++ b/SqlSugarTest/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/SqlSugarTest/Form1.Designer.cs b/SqlSugarTest/Form1.Designer.cs new file mode 100644 index 0000000..7105655 --- /dev/null +++ b/SqlSugarTest/Form1.Designer.cs @@ -0,0 +1,63 @@ +namespace SqlSugarTest +{ + partial class Form1 + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.button1 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(12, 12); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(136, 49); + this.button1.TabIndex = 0; + this.button1.Text = "button1"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(158, 71); + this.Controls.Add(this.button1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Name = "Form1"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Form1"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button button1; + } +} + diff --git a/SqlSugarTest/Form1.cs b/SqlSugarTest/Form1.cs new file mode 100644 index 0000000..896027a --- /dev/null +++ b/SqlSugarTest/Form1.cs @@ -0,0 +1,59 @@ +using DeviceRepair.Models; +using DeviceRepair.Models.Device; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SqlSugarTest +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + private void button1_Click(object sender, EventArgs e) + { + try + { + using (SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() + { + ConnectionString = "Data Source=www.clovejunti.cn,11433;Initial Catalog=DriveMaintenance;Persist Security Info=True;User ID=sa;Password=P@ssw0rd;", + DbType = SqlSugar.DbType.SqlServer, + IsAutoCloseConnection = true, + InitKeyType = InitKeyType.Attribute + })) + { + // 获取设备计划信息 + DeviceInformationInfo Dev = db.Queryable().First(x => x.AutoID == 408); + List plans = db.Queryable().Where(x => x.EquipmentID == 408 && x.MaintenanceYear == 2024 && SqlFunc.HasValue(x.MaintenanceType)).ToList(); + int[] pIds = plans.Select(x => x.AutoID).ToArray(); + + List records = db.Queryable().Where(x => x.EquipmentPrimaryID == 408 && SqlFunc.ContainsArray(pIds, x.AutoID)).ToList(); + + + DeviceAnnPlanView devs = new DeviceAnnPlanView + { + Dev = Dev, + Plans = plans, + Records = records + }; + + + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } + } +} diff --git a/SqlSugarTest/Form1.resx b/SqlSugarTest/Form1.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/SqlSugarTest/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SqlSugarTest/Program.cs b/SqlSugarTest/Program.cs new file mode 100644 index 0000000..8a0fa2d --- /dev/null +++ b/SqlSugarTest/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SqlSugarTest +{ + static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/SqlSugarTest/Properties/AssemblyInfo.cs b/SqlSugarTest/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..f652531 --- /dev/null +++ b/SqlSugarTest/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("SqlSugarTest")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SqlSugarTest")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +//将 ComVisible 设置为 false 将使此程序集中的类型 +//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("e46c1282-638c-4896-bcdb-3f482d358d9c")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/SqlSugarTest/Properties/Resources.Designer.cs b/SqlSugarTest/Properties/Resources.Designer.cs new file mode 100644 index 0000000..c848733 --- /dev/null +++ b/SqlSugarTest/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本: 4.0.30319.42000 +// +// 对此文件的更改可能导致不正确的行为,如果 +// 重新生成代码,则所做更改将丢失。 +// +//------------------------------------------------------------------------------ + +namespace SqlSugarTest.Properties +{ + + + /// + /// 强类型资源类,用于查找本地化字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// 返回此类使用的缓存 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SqlSugarTest.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 覆盖当前线程的 CurrentUICulture 属性 + /// 使用此强类型的资源类的资源查找。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/SqlSugarTest/Properties/Resources.resx b/SqlSugarTest/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/SqlSugarTest/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SqlSugarTest/Properties/Settings.Designer.cs b/SqlSugarTest/Properties/Settings.Designer.cs new file mode 100644 index 0000000..ce91eee --- /dev/null +++ b/SqlSugarTest/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SqlSugarTest.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/SqlSugarTest/Properties/Settings.settings b/SqlSugarTest/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/SqlSugarTest/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SqlSugarTest/SqlSugarTest.csproj b/SqlSugarTest/SqlSugarTest.csproj new file mode 100644 index 0000000..4028c12 --- /dev/null +++ b/SqlSugarTest/SqlSugarTest.csproj @@ -0,0 +1,105 @@ + + + + + Debug + AnyCPU + {E46C1282-638C-4896-BCDB-3F482D358D9C} + WinExe + Properties + SqlSugarTest + SqlSugarTest + v4.5.2 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\sqlSugar.5.0.0\lib\SqlSugar.dll + True + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + {2a1ffb12-b20f-4f9b-905e-1f928f17b4ee} + DeviceRepair.Models + + + {2ae8089a-c70a-47be-921b-de6a502f8d04} + DeviceRepair.Utils + + + + + \ No newline at end of file diff --git a/SqlSugarTest/bin/Debug/DeviceRepair.Models.dll b/SqlSugarTest/bin/Debug/DeviceRepair.Models.dll new file mode 100644 index 0000000..54eb213 --- /dev/null +++ b/SqlSugarTest/bin/Debug/DeviceRepair.Models.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:959ea2c2a0db74144020dc2f4396e2e56a9d0718795aa207ba6c1ca81916da47 +size 130560 diff --git a/SqlSugarTest/bin/Debug/DeviceRepair.Models.pdb b/SqlSugarTest/bin/Debug/DeviceRepair.Models.pdb new file mode 100644 index 0000000000000000000000000000000000000000..5c40739494c74dc1479bd4ff1cfb6c54cd73b662 GIT binary patch literal 486912 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

TpF6hdk@p{eu79Al;-jr6qCU{q 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 Z(EFj|?!BdfMyk{F-m22^+VnsJ{};RH+!Fu* literal 0 HcmV?d00001 diff --git a/SqlSugarTest/bin/Debug/ICSharpCode.SharpZipLib.dll b/SqlSugarTest/bin/Debug/ICSharpCode.SharpZipLib.dll new file mode 100644 index 0000000..f9110c0 --- /dev/null +++ b/SqlSugarTest/bin/Debug/ICSharpCode.SharpZipLib.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c32b22249ca820844cb40305e6353e8ca2f52737e5f5ee13f6bb8b36ade7263 +size 198656 diff --git a/SqlSugarTest/bin/Debug/ICSharpCode.SharpZipLib.pdb b/SqlSugarTest/bin/Debug/ICSharpCode.SharpZipLib.pdb new file mode 100644 index 0000000000000000000000000000000000000000..2d948eb8c936c2d37aefa2c9a115f5020bc16af8 GIT binary patch literal 96840 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 A5C8xG literal 0 HcmV?d00001 diff --git a/SqlSugarTest/bin/Debug/ICSharpCode.SharpZipLib.xml b/SqlSugarTest/bin/Debug/ICSharpCode.SharpZipLib.xml new file mode 100644 index 0000000..780aecf --- /dev/null +++ b/SqlSugarTest/bin/Debug/ICSharpCode.SharpZipLib.xml @@ -0,0 +1,10331 @@ + + + + ICSharpCode.SharpZipLib + + + +

+ An example class to demonstrate compression and decompression of BZip2 streams. + + + + + Decompress the input writing + uncompressed data to the output stream + + The readable stream containing data to decompress. + The output stream to receive the decompressed data. + Both streams are closed on completion if true. + + + + Compress the input stream sending + result data to output stream + + The readable stream to compress. + The output stream to receive the compressed data. + Both streams are closed on completion if true. + Block size acts as compression level (1 to 9) with 1 giving + the lowest compression and 9 the highest. + + + + Defines internal values for both compression and decompression + + + + + Random numbers used to randomise repetitive blocks + + + + + When multiplied by compression parameter (1-9) gives the block size for compression + 9 gives the best compression but uses the most memory. + + + + + Backend constant + + + + + Backend constant + + + + + Backend constant + + + + + Backend constant + + + + + Backend constant + + + + + Backend constant + + + + + Backend constant + + + + + Backend constant + + + + + Backend constant + + + + + BZip2Exception represents exceptions specific to BZip2 classes and code. + + + + + Initialise a new instance of . + + + + + Initialise a new instance of with its message string. + + A that describes the error. + + + + Initialise a new instance of . + + A that describes the error. + The that caused this exception. + + + + Initializes a new instance of the BZip2Exception class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + An input stream that decompresses files in the BZip2 format + + + + + Construct instance for reading from stream + + Data source + + + + Get/set flag indicating ownership of underlying stream. + When the flag is true will close the underlying stream also. + + + + + Gets a value indicating if the stream supports reading + + + + + Gets a value indicating whether the current stream supports seeking. + + + + + Gets a value indicating whether the current stream supports writing. + This property always returns false + + + + + Gets the length in bytes of the stream. + + + + + Gets the current position of the stream. + Setting the position is not supported and will throw a NotSupportException. + + Any attempt to set the position. + + + + Flushes the stream. + + + + + Set the streams position. This operation is not supported and will throw a NotSupportedException + + A byte offset relative to the parameter. + A value of type indicating the reference point used to obtain the new position. + The new position of the stream. + Any access + + + + Sets the length of this stream to the given value. + This operation is not supported and will throw a NotSupportedExceptionortedException + + The new length for the stream. + Any access + + + + Writes a block of bytes to this stream using data from a buffer. + This operation is not supported and will throw a NotSupportedException + + The buffer to source data from. + The offset to start obtaining data from. + The number of bytes of data to write. + Any access + + + + Writes a byte to the current position in the file stream. + This operation is not supported and will throw a NotSupportedException + + The value to write. + Any access + + + + Read a sequence of bytes and advances the read position by one byte. + + Array of bytes to store values in + Offset in array to begin storing data + The maximum number of bytes to read + The total number of bytes read into the buffer. This might be less + than the number of bytes requested if that number of bytes are not + currently available or zero if the end of the stream is reached. + + + + + Closes the stream, releasing any associated resources. + + + + + Read a byte from stream advancing position + + byte read or -1 on end of stream + + + + An output stream that compresses into the BZip2 format + including file header chars into another stream. + + + + + Construct a default output stream with maximum block size + + The stream to write BZip data onto. + + + + Initialise a new instance of the + for the specified stream, using the given blocksize. + + The stream to write compressed data to. + The block size to use. + + Valid block sizes are in the range 1..9, with 1 giving + the lowest compression and 9 the highest. + + + + + Ensures that resources are freed and other cleanup operations + are performed when the garbage collector reclaims the BZip2OutputStream. + + + + + Gets or sets a flag indicating ownership of underlying stream. + When the flag is true will close the underlying stream also. + + The default value is true. + + + + Gets a value indicating whether the current stream supports reading + + + + + Gets a value indicating whether the current stream supports seeking + + + + + Gets a value indicating whether the current stream supports writing + + + + + Gets the length in bytes of the stream + + + + + Gets or sets the current position of this stream. + + + + + Sets the current position of this stream to the given value. + + The point relative to the offset from which to being seeking. + The reference point from which to begin seeking. + The new position in the stream. + + + + Sets the length of this stream to the given value. + + The new stream length. + + + + Read a byte from the stream advancing the position. + + The byte read cast to an int; -1 if end of stream. + + + + Read a block of bytes + + The buffer to read into. + The offset in the buffer to start storing data at. + The maximum number of bytes to read. + The total number of bytes read. This might be less than the number of bytes + requested if that number of bytes are not currently available, or zero + if the end of the stream is reached. + + + + Write a block of bytes to the stream + + The buffer containing data to write. + The offset of the first byte to write. + The number of bytes to write. + + + + Write a byte to the stream. + + The byte to write to the stream. + + + + Get the number of bytes written to output. + + + + + Get the number of bytes written to the output. + + + + + Releases the unmanaged resources used by the and optionally releases the managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Flush output buffers + + + + + Computes Adler32 checksum for a stream of data. An Adler32 + checksum is not as reliable as a CRC32 checksum, but a lot faster to + compute. + + The specification for Adler32 may be found in RFC 1950. + ZLIB Compressed Data Format Specification version 3.3) + + + From that document: + + "ADLER32 (Adler-32 checksum) + This contains a checksum value of the uncompressed data + (excluding any dictionary data) computed according to Adler-32 + algorithm. This algorithm is a 32-bit extension and improvement + of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073 + standard. + + Adler-32 is composed of two sums accumulated per byte: s1 is + the sum of all bytes, s2 is the sum of all s1 values. Both sums + are done modulo 65521. s1 is initialized to 1, s2 to zero. The + Adler-32 checksum is stored as s2*65536 + s1 in most- + significant-byte first (network) order." + + "8.2. The Adler-32 algorithm + + The Adler-32 algorithm is much faster than the CRC32 algorithm yet + still provides an extremely low probability of undetected errors. + + The modulo on unsigned long accumulators can be delayed for 5552 + bytes, so the modulo operation time is negligible. If the bytes + are a, b, c, the second sum is 3a + 2b + c + 3, and so is position + and order sensitive, unlike the first sum, which is just a + checksum. That 65521 is prime is important to avoid a possible + large class of two-byte errors that leave the check unchanged. + (The Fletcher checksum uses 255, which is not prime and which also + makes the Fletcher check insensitive to single byte changes 0 - + 255.) + + The sum s1 is initialized to 1 instead of zero to make the length + of the sequence part of s2, so that the length does not have to be + checked separately. (Any sequence of zeroes has a Fletcher + checksum of zero.)" + + + + + + + largest prime smaller than 65536 + + + + + The CRC data checksum so far. + + + + + Initialise a default instance of + + + + + Resets the Adler32 data checksum as if no update was ever called. + + + + + Returns the Adler32 data checksum computed so far. + + + + + Updates the checksum with the byte b. + + + The data value to add. The high byte of the int is ignored. + + + + + Updates the Adler32 data checksum with the bytes taken from + a block of data. + + Contains the data to update the checksum with. + + + + Update Adler32 data checksum based on a portion of a block of data + + + The chunk of data to add + + + + + CRC-32 with unreversed data and reversed output + + + Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: + x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x^1+x^0. + + Polynomials over GF(2) are represented in binary, one bit per coefficient, + with the lowest powers in the most significant bit. Then adding polynomials + is just exclusive-or, and multiplying a polynomial by x is a right shift by + one. If we call the above polynomial p, and represent a byte as the + polynomial q, also with the lowest power in the most significant bit (so the + byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, + where a mod b means the remainder after dividing a by b. + + This calculation is done using the shift-register method of multiplying and + taking the remainder. The register is initialized to zero, and for each + incoming bit, x^32 is added mod p to the register if the bit is a one (where + x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by + x (which is shifting right by one and adding x^32 mod p if the bit shifted + out is a one). We start with the highest power (least significant bit) of + q and repeat for all eight bits of q. + + The table is simply the CRC of all possible eight bit values. This is all + the information needed to generate CRC's on data a byte at a time for all + combinations of CRC register values and incoming bytes. + + + + + The CRC data checksum so far. + + + + + Initialise a default instance of + + + + + Resets the CRC data checksum as if no update was ever called. + + + + + Returns the CRC data checksum computed so far. + + Reversed Out = true + + + + Updates the checksum with the int bval. + + + the byte is taken as the lower 8 bits of bval + + Reversed Data = false + + + + Updates the CRC data checksum with the bytes taken from + a block of data. + + Contains the data to update the CRC with. + + + + Update CRC data checksum based on a portion of a block of data + + + The chunk of data to add + + + + + CRC-32 with reversed data and unreversed output + + + Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: + x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x^1+x^0. + + Polynomials over GF(2) are represented in binary, one bit per coefficient, + with the lowest powers in the most significant bit. Then adding polynomials + is just exclusive-or, and multiplying a polynomial by x is a right shift by + one. If we call the above polynomial p, and represent a byte as the + polynomial q, also with the lowest power in the most significant bit (so the + byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, + where a mod b means the remainder after dividing a by b. + + This calculation is done using the shift-register method of multiplying and + taking the remainder. The register is initialized to zero, and for each + incoming bit, x^32 is added mod p to the register if the bit is a one (where + x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by + x (which is shifting right by one and adding x^32 mod p if the bit shifted + out is a one). We start with the highest power (least significant bit) of + q and repeat for all eight bits of q. + + The table is simply the CRC of all possible eight bit values. This is all + the information needed to generate CRC's on data a byte at a time for all + combinations of CRC register values and incoming bytes. + + + + + The CRC data checksum so far. + + + + + Initialise a default instance of + + + + + Resets the CRC data checksum as if no update was ever called. + + + + + Returns the CRC data checksum computed so far. + + Reversed Out = false + + + + Updates the checksum with the int bval. + + + the byte is taken as the lower 8 bits of bval + + Reversed Data = true + + + + Updates the CRC data checksum with the bytes taken from + a block of data. + + Contains the data to update the CRC with. + + + + Update CRC data checksum based on a portion of a block of data + + + The chunk of data to add + + + + + Interface to compute a data checksum used by checked input/output streams. + A data checksum can be updated by one byte or with a byte array. After each + update the value of the current checksum can be returned by calling + getValue. The complete checksum object can also be reset + so it can be used again with new data. + + + + + Resets the data checksum as if no update was ever called. + + + + + Returns the data checksum computed so far. + + + + + Adds one byte to the data checksum. + + + the data value to add. The high byte of the int is ignored. + + + + + Updates the data checksum with the bytes taken from the array. + + + buffer an array of bytes + + + + + Adds the byte array to the data checksum. + + + The chunk of data to add + + + + + SharpZipBaseException is the base exception class for SharpZipLib. + All library exceptions are derived from this. + + NOTE: Not all exceptions thrown will be derived from this class. + A variety of other exceptions are possible for example + + + + Initializes a new instance of the SharpZipBaseException class. + + + + + Initializes a new instance of the SharpZipBaseException class with a specified error message. + + A message describing the exception. + + + + Initializes a new instance of the SharpZipBaseException class with a specified + error message and a reference to the inner exception that is the cause of this exception. + + A message describing the exception. + The inner exception + + + + Initializes a new instance of the SharpZipBaseException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + Indicates that an error occured during decoding of a input stream due to corrupt + data or (unintentional) library incompability. + + + + + Initializes a new instance of the StreamDecodingException with a generic message + + + + + Initializes a new instance of the StreamDecodingException class with a specified error message. + + A message describing the exception. + + + + Initializes a new instance of the StreamDecodingException class with a specified + error message and a reference to the inner exception that is the cause of this exception. + + A message describing the exception. + The inner exception + + + + Initializes a new instance of the StreamDecodingException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + Indicates that the input stream could not decoded due to known library incompability or missing features + + + + + Initializes a new instance of the StreamUnsupportedException with a generic message + + + + + Initializes a new instance of the StreamUnsupportedException class with a specified error message. + + A message describing the exception. + + + + Initializes a new instance of the StreamUnsupportedException class with a specified + error message and a reference to the inner exception that is the cause of this exception. + + A message describing the exception. + The inner exception + + + + Initializes a new instance of the StreamUnsupportedException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + Indicates that the input stream could not decoded due to the stream ending before enough data had been provided + + + + + Initializes a new instance of the UnexpectedEndOfStreamException with a generic message + + + + + Initializes a new instance of the UnexpectedEndOfStreamException class with a specified error message. + + A message describing the exception. + + + + Initializes a new instance of the UnexpectedEndOfStreamException class with a specified + error message and a reference to the inner exception that is the cause of this exception. + + A message describing the exception. + The inner exception + + + + Initializes a new instance of the UnexpectedEndOfStreamException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + Indicates that a value was outside of the expected range when decoding an input stream + + + + + Initializes a new instance of the ValueOutOfRangeException class naming the the causing variable + + Name of the variable, use: nameof() + + + + Initializes a new instance of the ValueOutOfRangeException class naming the the causing variable, + it's current value and expected range. + + Name of the variable, use: nameof() + The invalid value + Expected maximum value + Expected minimum value + + + + Initializes a new instance of the ValueOutOfRangeException class naming the the causing variable, + it's current value and expected range. + + Name of the variable, use: nameof() + The invalid value + Expected maximum value + Expected minimum value + + + + Initializes a new instance of the ValueOutOfRangeException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + Event arguments for scanning. + + + + + Initialise a new instance of + + The file or directory name. + + + + The file or directory name for this event. + + + + + Get set a value indicating if scanning should continue or not. + + + + + Event arguments during processing of a single file or directory. + + + + + Initialise a new instance of + + The file or directory name if known. + The number of bytes processed so far + The total number of bytes to process, 0 if not known + + + + The name for this event if known. + + + + + Get set a value indicating wether scanning should continue or not. + + + + + Get a percentage representing how much of the has been processed + + 0.0 to 100.0 percent; 0 if target is not known. + + + + The number of bytes processed so far + + + + + The number of bytes to process. + + Target may be 0 or negative if the value isnt known. + + + + Event arguments for directories. + + + + + Initialize an instance of . + + The name for this directory. + Flag value indicating if any matching files are contained in this directory. + + + + Get a value indicating if the directory contains any matching files or not. + + + + + Arguments passed when scan failures are detected. + + + + + Initialise a new instance of + + The name to apply. + The exception to use. + + + + The applicable name. + + + + + The applicable exception. + + + + + Get / set a value indicating wether scanning should continue. + + + + + Delegate invoked before starting to process a file. + + The source of the event + The event arguments. + + + + Delegate invoked during processing of a file or directory + + The source of the event + The event arguments. + + + + Delegate invoked when a file has been completely processed. + + The source of the event + The event arguments. + + + + Delegate invoked when a directory failure is detected. + + The source of the event + The event arguments. + + + + Delegate invoked when a file failure is detected. + + The source of the event + The event arguments. + + + + FileSystemScanner provides facilities scanning of files and directories. + + + + + Initialise a new instance of + + The file filter to apply when scanning. + + + + Initialise a new instance of + + The file filter to apply. + The directory filter to apply. + + + + Initialise a new instance of + + The file filter to apply. + + + + Initialise a new instance of + + The file filter to apply. + The directory filter to apply. + + + + Delegate to invoke when a directory is processed. + + + + + Delegate to invoke when a file is processed. + + + + + Delegate to invoke when processing for a file has finished. + + + + + Delegate to invoke when a directory failure is detected. + + + + + Delegate to invoke when a file failure is detected. + + + + + Raise the DirectoryFailure event. + + The directory name. + The exception detected. + + + + Raise the FileFailure event. + + The file name. + The exception detected. + + + + Raise the ProcessFile event. + + The file name. + + + + Raise the complete file event + + The file name + + + + Raise the ProcessDirectory event. + + The directory name. + Flag indicating if the directory has matching files. + + + + Scan a directory. + + The base directory to scan. + True to recurse subdirectories, false to scan a single directory. + + + + The file filter currently in use. + + + + + The directory filter currently in use. + + + + + Flag indicating if scanning should continue running. + + + + + INameTransform defines how file system names are transformed for use with archives, or vice versa. + + + + + Given a file name determine the transformed value. + + The name to transform. + The transformed file name. + + + + Given a directory name determine the transformed value. + + The name to transform. + The transformed directory name + + + + InvalidNameException is thrown for invalid names such as directory traversal paths and names with invalid characters + + + + + Initializes a new instance of the InvalidNameException class with a default error message. + + + + + Initializes a new instance of the InvalidNameException class with a specified error message. + + A message describing the exception. + + + + Initializes a new instance of the InvalidNameException class with a specified + error message and a reference to the inner exception that is the cause of this exception. + + A message describing the exception. + The inner exception + + + + Initializes a new instance of the InvalidNameException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + Scanning filters support filtering of names. + + + + + Test a name to see if it 'matches' the filter. + + The name to test. + Returns true if the name matches the filter, false if it does not match. + + + + NameFilter is a string matching class which allows for both positive and negative + matching. + A filter is a sequence of independant regular expressions separated by semi-colons ';'. + To include a semi-colon it may be quoted as in \;. Each expression can be prefixed by a plus '+' sign or + a minus '-' sign to denote the expression is intended to include or exclude names. + If neither a plus or minus sign is found include is the default. + A given name is tested for inclusion before checking exclusions. Only names matching an include spec + and not matching an exclude spec are deemed to match the filter. + An empty filter matches any name. + + The following expression includes all name ending in '.dat' with the exception of 'dummy.dat' + "+\.dat$;-^dummy\.dat$" + + + + + Construct an instance based on the filter expression passed + + The filter expression. + + + + Test a string to see if it is a valid regular expression. + + The expression to test. + True if expression is a valid false otherwise. + + + + Test an expression to see if it is valid as a filter. + + The filter expression to test. + True if the expression is valid, false otherwise. + + + + Split a string into its component pieces + + The original string + Returns an array of values containing the individual filter elements. + + + + Convert this filter to its string equivalent. + + The string equivalent for this filter. + + + + Test a value to see if it is included by the filter. + + The value to test. + True if the value is included, false otherwise. + + + + Test a value to see if it is excluded by the filter. + + The value to test. + True if the value is excluded, false otherwise. + + + + Test a value to see if it matches the filter. + + The value to test. + True if the value matches, false otherwise. + + + + Compile this filter. + + + + + PathFilter filters directories and files using a form of regular expressions + by full path name. + See NameFilter for more detail on filtering. + + + + + Initialise a new instance of . + + The filter expression to apply. + + + + Test a name to see if it matches the filter. + + The name to test. + True if the name matches, false otherwise. + is used to get the full path before matching. + + + + ExtendedPathFilter filters based on name, file size, and the last write time of the file. + + Provides an example of how to customise filtering. + + + + Initialise a new instance of ExtendedPathFilter. + + The filter to apply. + The minimum file size to include. + The maximum file size to include. + + + + Initialise a new instance of ExtendedPathFilter. + + The filter to apply. + The minimum to include. + The maximum to include. + + + + Initialise a new instance of ExtendedPathFilter. + + The filter to apply. + The minimum file size to include. + The maximum file size to include. + The minimum to include. + The maximum to include. + + + + Test a filename to see if it matches the filter. + + The filename to test. + True if the filter matches, false otherwise. + The doesnt exist + + + + Get/set the minimum size/length for a file that will match this filter. + + The default value is zero. + value is less than zero; greater than + + + + Get/set the maximum size/length for a file that will match this filter. + + The default value is + value is less than zero or less than + + + + Get/set the minimum value that will match for this filter. + + Files with a LastWrite time less than this value are excluded by the filter. + + + + Get/set the maximum value that will match for this filter. + + Files with a LastWrite time greater than this value are excluded by the filter. + + + + NameAndSizeFilter filters based on name and file size. + + A sample showing how filters might be extended. + + + + Initialise a new instance of NameAndSizeFilter. + + The filter to apply. + The minimum file size to include. + The maximum file size to include. + + + + Test a filename to see if it matches the filter. + + The filename to test. + True if the filter matches, false otherwise. + + + + Get/set the minimum size for a file that will match this filter. + + + + + Get/set the maximum size for a file that will match this filter. + + + + + Provides simple " utilities. + + + + + Read from a ensuring all the required data is read. + + The stream to read. + The buffer to fill. + + + + + Read from a " ensuring all the required data is read. + + The stream to read data from. + The buffer to store data in. + The offset at which to begin storing data. + The number of bytes of data to store. + Required parameter is null + and or are invalid. + End of stream is encountered before all the data has been read. + + + + Read as much data as possible from a ", up to the requested number of bytes + + The stream to read data from. + The buffer to store data in. + The offset at which to begin storing data. + The number of bytes of data to store. + Required parameter is null + and or are invalid. + + + + Copy the contents of one to another. + + The stream to source data from. + The stream to write data to. + The buffer to use during copying. + + + + Copy the contents of one to another. + + The stream to source data from. + The stream to write data to. + The buffer to use during copying. + The progress handler delegate to use. + The minimum between progress updates. + The source for this event. + The name to use with the event. + This form is specialised for use within #Zip to support events during archive operations. + + + + Copy the contents of one to another. + + The stream to source data from. + The stream to write data to. + The buffer to use during copying. + The progress handler delegate to use. + The minimum between progress updates. + The source for this event. + The name to use with the event. + A predetermined fixed target value to use with progress updates. + If the value is negative the target is calculated by looking at the stream. + This form is specialised for use within #Zip to support events during archive operations. + + + + Initialise an instance of + + + + + WindowsPathUtils provides simple utilities for handling windows paths. + + + + + Initializes a new instance of the class. + + + + + Remove any path root present in the path + + A containing path information. + The path with the root removed if it was present; path otherwise. + Unlike the class the path isnt otherwise checked for validity. + + + + PkzipClassic embodies the classic or original encryption facilities used in Pkzip archives. + While it has been superceded by more recent and more powerful algorithms, its still in use and + is viable for preventing casual snooping + + + + + Generates new encryption keys based on given seed + + The seed value to initialise keys with. + A new key value. + + + + PkzipClassicCryptoBase provides the low level facilities for encryption + and decryption using the PkzipClassic algorithm. + + + + + Transform a single byte + + + The transformed value + + + + + Set the key schedule for encryption/decryption. + + The data use to set the keys from. + + + + Update encryption keys + + + + + Reset the internal state. + + + + + PkzipClassic CryptoTransform for encryption. + + + + + Initialise a new instance of + + The key block to use. + + + + Transforms the specified region of the specified byte array. + + The input for which to compute the transform. + The offset into the byte array from which to begin using data. + The number of bytes in the byte array to use as data. + The computed transform. + + + + Transforms the specified region of the input byte array and copies + the resulting transform to the specified region of the output byte array. + + The input for which to compute the transform. + The offset into the input byte array from which to begin using data. + The number of bytes in the input byte array to use as data. + The output to which to write the transform. + The offset into the output byte array from which to begin writing data. + The number of bytes written. + + + + Gets a value indicating whether the current transform can be reused. + + + + + Gets the size of the input data blocks in bytes. + + + + + Gets the size of the output data blocks in bytes. + + + + + Gets a value indicating whether multiple blocks can be transformed. + + + + + Cleanup internal state. + + + + + PkzipClassic CryptoTransform for decryption. + + + + + Initialise a new instance of . + + The key block to decrypt with. + + + + Transforms the specified region of the specified byte array. + + The input for which to compute the transform. + The offset into the byte array from which to begin using data. + The number of bytes in the byte array to use as data. + The computed transform. + + + + Transforms the specified region of the input byte array and copies + the resulting transform to the specified region of the output byte array. + + The input for which to compute the transform. + The offset into the input byte array from which to begin using data. + The number of bytes in the input byte array to use as data. + The output to which to write the transform. + The offset into the output byte array from which to begin writing data. + The number of bytes written. + + + + Gets a value indicating whether the current transform can be reused. + + + + + Gets the size of the input data blocks in bytes. + + + + + Gets the size of the output data blocks in bytes. + + + + + Gets a value indicating whether multiple blocks can be transformed. + + + + + Cleanup internal state. + + + + + Defines a wrapper object to access the Pkzip algorithm. + This class cannot be inherited. + + + + + Get / set the applicable block size in bits. + + The only valid block size is 8. + + + + Get an array of legal key sizes. + + + + + Generate an initial vector. + + + + + Get an array of legal block sizes. + + + + + Get / set the key value applicable. + + + + + Generate a new random key. + + + + + Create an encryptor. + + The key to use for this encryptor. + Initialisation vector for the new encryptor. + Returns a new PkzipClassic encryptor + + + + Create a decryptor. + + Keys to use for this new decryptor. + Initialisation vector for the new decryptor. + Returns a new decryptor. + + + + Encrypts and decrypts AES ZIP + + + Based on information from http://www.winzip.com/aes_info.htm + and http://www.gladman.me.uk/cryptography_technology/fileencrypt/ + + + + + Constructor + + The stream on which to perform the cryptographic transformation. + Instance of ZipAESTransform + Read or Write + + + + Reads a sequence of bytes from the current CryptoStream into buffer, + and advances the position within the stream by the number of bytes read. + + + + + Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + An array of bytes. This method copies count bytes from buffer to the current stream. + The byte offset in buffer at which to begin copying bytes to the current stream. + The number of bytes to be written to the current stream. + + + + Transforms stream using AES in CTR mode + + + + + Constructor. + + Password string + Random bytes, length depends on encryption strength. + 128 bits = 8 bytes, 192 bits = 12 bytes, 256 bits = 16 bytes. + The encryption strength, in bytes eg 16 for 128 bits. + True when creating a zip, false when reading. For the AuthCode. + + + + + Implement the ICryptoTransform method. + + + + + Returns the 2 byte password verifier + + + + + Returns the 10 byte AUTH CODE to be checked or appended immediately following the AES data stream. + + + + + Not implemented. + + + + + Gets the size of the input data blocks in bytes. + + + + + Gets the size of the output data blocks in bytes. + + + + + Gets a value indicating whether multiple blocks can be transformed. + + + + + Gets a value indicating whether the current transform can be reused. + + + + + Cleanup internal state. + + + + + An example class to demonstrate compression and decompression of GZip streams. + + + + + Decompress the input writing + uncompressed data to the output stream + + The readable stream containing data to decompress. + The output stream to receive the decompressed data. + Both streams are closed on completion if true. + Input or output stream is null + + + + Compress the input stream sending + result data to output stream + + The readable stream to compress. + The output stream to receive the compressed data. + Both streams are closed on completion if true. + Deflate buffer size, minimum 512 + Deflate compression level, 0-9 + Input or output stream is null + Buffer Size is smaller than 512 + Compression level outside 0-9 + + + + This class contains constants used for gzip. + + + + + Magic number found at start of GZIP header + + + + + Flag bit mask for text + + + + + Flag bitmask for Crc + + + + + Flag bit mask for extra + + + + + flag bitmask for name + + + + + flag bit mask indicating comment is present + + + + + Initialise default instance. + + Constructor is private to prevent instances being created. + + + + GZipException represents exceptions specific to GZip classes and code. + + + + + Initialise a new instance of . + + + + + Initialise a new instance of with its message string. + + A that describes the error. + + + + Initialise a new instance of . + + A that describes the error. + The that caused this exception. + + + + Initializes a new instance of the GZipException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + This filter stream is used to decompress a "GZIP" format stream. + The "GZIP" format is described baseInputStream RFC 1952. + + author of the original java version : John Leuner + + This sample shows how to unzip a gzipped file + + using System; + using System.IO; + + using ICSharpCode.SharpZipLib.Core; + using ICSharpCode.SharpZipLib.GZip; + + class MainClass + { + public static void Main(string[] args) + { + using (Stream inStream = new GZipInputStream(File.OpenRead(args[0]))) + using (FileStream outStream = File.Create(Path.GetFileNameWithoutExtension(args[0]))) { + byte[] buffer = new byte[4096]; + StreamUtils.Copy(inStream, outStream, buffer); + } + } + } + + + + + + CRC-32 value for uncompressed data + + + + + Flag to indicate if we've read the GZIP header yet for the current member (block of compressed data). + This is tracked per-block as the file is parsed. + + + + + Flag to indicate if at least one block in a stream with concatenated blocks was read successfully. + This allows us to exit gracefully if downstream data is not in gzip format. + + + + + Creates a GZipInputStream with the default buffer size + + + The stream to read compressed data from (baseInputStream GZIP format) + + + + + Creates a GZIPInputStream with the specified buffer size + + + The stream to read compressed data from (baseInputStream GZIP format) + + + Size of the buffer to use + + + + + Reads uncompressed data into an array of bytes + + + The buffer to read uncompressed data into + + + The offset indicating where the data should be placed + + + The number of uncompressed bytes to be read + + Returns the number of bytes actually read. + + + + This filter stream is used to compress a stream into a "GZIP" stream. + The "GZIP" format is described in RFC 1952. + + author of the original java version : John Leuner + + This sample shows how to gzip a file + + using System; + using System.IO; + + using ICSharpCode.SharpZipLib.GZip; + using ICSharpCode.SharpZipLib.Core; + + class MainClass + { + public static void Main(string[] args) + { + using (Stream s = new GZipOutputStream(File.Create(args[0] + ".gz"))) + using (FileStream fs = File.OpenRead(args[0])) { + byte[] writeData = new byte[4096]; + Streamutils.Copy(s, fs, writeData); + } + } + } + } + + + + + + CRC-32 value for uncompressed data + + + + + Creates a GzipOutputStream with the default buffer size + + + The stream to read data (to be compressed) from + + + + + Creates a GZipOutputStream with the specified buffer size + + + The stream to read data (to be compressed) from + + + Size of the buffer to use + + + + + Sets the active compression level (0-9). The new level will be activated + immediately. + + The compression level to set. + + Level specified is not supported. + + + + + + Get the current compression level. + + The current compression level. + + + + Write given buffer to output updating crc + + Buffer to write + Offset of first byte in buf to write + Number of bytes to write + + + + Writes remaining compressed output data to the output stream + and closes it. + + + + + Finish compression and write any footer information required to stream + + + + + This class contains constants used for LZW + + + + + Magic number found at start of LZW header: 0x1f 0x9d + + + + + Maximum number of bits per code + + + + + Mask for 'number of compression bits' + + + + + Indicates the presence of a fourth header byte + + + + + Reserved bits + + + + + Block compression: if table is full and compression rate is dropping, + clear the dictionary. + + + + + LZW file header size (in bytes) + + + + + Initial number of bits per code + + + + + LzwException represents exceptions specific to LZW classes and code. + + + + + Initialise a new instance of . + + + + + Initialise a new instance of with its message string. + + A that describes the error. + + + + Initialise a new instance of . + + A that describes the error. + The that caused this exception. + + + + Initializes a new instance of the LzwException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + This filter stream is used to decompress a LZW format stream. + Specifically, a stream that uses the LZC compression method. + This file format is usually associated with the .Z file extension. + + See http://en.wikipedia.org/wiki/Compress + See http://wiki.wxwidgets.org/Development:_Z_File_Format + + The file header consists of 3 (or optionally 4) bytes. The first two bytes + contain the magic marker "0x1f 0x9d", followed by a byte of flags. + + Based on Java code by Ronald Tschalar, which in turn was based on the unlzw.c + code in the gzip package. + + This sample shows how to unzip a compressed file + + using System; + using System.IO; + + using ICSharpCode.SharpZipLib.Core; + using ICSharpCode.SharpZipLib.LZW; + + class MainClass + { + public static void Main(string[] args) + { + using (Stream inStream = new LzwInputStream(File.OpenRead(args[0]))) + using (FileStream outStream = File.Create(Path.GetFileNameWithoutExtension(args[0]))) { + byte[] buffer = new byte[4096]; + StreamUtils.Copy(inStream, outStream, buffer); + // OR + inStream.Read(buffer, 0, buffer.Length); + // now do something with the buffer + } + } + } + + + + + + Gets or sets a flag indicating ownership of underlying stream. + When the flag is true will close the underlying stream also. + + The default value is true. + + + + Creates a LzwInputStream + + + The stream to read compressed data from (baseInputStream LZW format) + + + + + See + + + + + + Reads decompressed data into the provided buffer byte array + + + The array to read and decompress data into + + + The offset indicating where the data should be placed + + + The number of bytes to decompress + + The number of bytes read. Zero signals the end of stream + + + + Moves the unread data in the buffer to the beginning and resets + the pointers. + + + + + + + Gets a value indicating whether the current stream supports reading + + + + + Gets a value of false indicating seeking is not supported for this stream. + + + + + Gets a value of false indicating that this stream is not writeable. + + + + + A value representing the length of the stream in bytes. + + + + + The current position within the stream. + Throws a NotSupportedException when attempting to set the position + + Attempting to set the position + + + + Flushes the baseInputStream + + + + + Sets the position within the current stream + Always throws a NotSupportedException + + The relative offset to seek to. + The defining where to seek from. + The new position in the stream. + Any access + + + + Set the length of the current stream + Always throws a NotSupportedException + + The new length value for the stream. + Any access + + + + Writes a sequence of bytes to stream and advances the current position + This method always throws a NotSupportedException + + Thew buffer containing data to write. + The offset of the first byte to write. + The number of bytes to write. + Any access + + + + Writes one byte to the current stream and advances the current position + Always throws a NotSupportedException + + The byte to write. + Any access + + + + Closes the input stream. When + is true the underlying stream is also closed. + + + + + Flag indicating wether this instance has been closed or not. + + + + + This exception is used to indicate that there is a problem + with a TAR archive header. + + + + + Initialise a new instance of the InvalidHeaderException class. + + + + + Initialises a new instance of the InvalidHeaderException class with a specified message. + + Message describing the exception cause. + + + + Initialise a new instance of InvalidHeaderException + + Message describing the problem. + The exception that is the cause of the current exception. + + + + Used to advise clients of 'events' while processing archives + + + + + The TarArchive class implements the concept of a + 'Tape Archive'. A tar archive is a series of entries, each of + which represents a file system object. Each entry in + the archive consists of a header block followed by 0 or more data blocks. + Directory entries consist only of the header block, and are followed by entries + for the directory's contents. File entries consist of a + header followed by the number of blocks needed to + contain the file's contents. All entries are written on + block boundaries. Blocks are 512 bytes long. + + TarArchives are instantiated in either read or write mode, + based upon whether they are instantiated with an InputStream + or an OutputStream. Once instantiated TarArchives read/write + mode can not be changed. + + There is currently no support for random access to tar archives. + However, it seems that subclassing TarArchive, and using the + TarBuffer.CurrentRecord and TarBuffer.CurrentBlock + properties, this would be rather trivial. + + + + + Client hook allowing detailed information to be reported during processing + + + + + Raises the ProgressMessage event + + The TarEntry for this event + message for this event. Null is no message + + + + Constructor for a default . + + + + + Initalise a TarArchive for input. + + The to use for input. + + + + Initialise a TarArchive for output. + + The to use for output. + + + + The InputStream based constructors create a TarArchive for the + purposes of extracting or listing a tar archive. Thus, use + these constructors when you wish to extract files from or list + the contents of an existing tar archive. + + The stream to retrieve archive data from. + Returns a new suitable for reading from. + + + + Create TarArchive for reading setting block factor + + A stream containing the tar archive contents + The blocking factor to apply + Returns a suitable for reading. + + + + Create a TarArchive for writing to, using the default blocking factor + + The to write to + Returns a suitable for writing. + + + + Create a tar archive for writing. + + The stream to write to + The blocking factor to use for buffering. + Returns a suitable for writing. + + + + Set the flag that determines whether existing files are + kept, or overwritten during extraction. + + + If true, do not overwrite existing files. + + + + + Get/set the ascii file translation flag. If ascii file translation + is true, then the file is checked to see if it a binary file or not. + If the flag is true and the test indicates it is ascii text + file, it will be translated. The translation converts the local + operating system's concept of line ends into the UNIX line end, + '\n', which is the defacto standard for a TAR archive. This makes + text files compatible with UNIX. + + + + + Set the ascii file translation flag. + + + If true, translate ascii text files. + + + + + PathPrefix is added to entry names as they are written if the value is not null. + A slash character is appended after PathPrefix + + + + + RootPath is removed from entry names if it is found at the + beginning of the name. + + + + + Set user and group information that will be used to fill in the + tar archive's entry headers. This information is based on that available + for the linux operating system, which is not always available on other + operating systems. TarArchive allows the programmer to specify values + to be used in their place. + is set to true by this call. + + + The user id to use in the headers. + + + The user name to use in the headers. + + + The group id to use in the headers. + + + The group name to use in the headers. + + + + + Get or set a value indicating if overrides defined by SetUserInfo should be applied. + + If overrides are not applied then the values as set in each header will be used. + + + + Get the archive user id. + See ApplyUserInfoOverrides for detail + on how to allow setting values on a per entry basis. + + + The current user id. + + + + + Get the archive user name. + See ApplyUserInfoOverrides for detail + on how to allow setting values on a per entry basis. + + + The current user name. + + + + + Get the archive group id. + See ApplyUserInfoOverrides for detail + on how to allow setting values on a per entry basis. + + + The current group id. + + + + + Get the archive group name. + See ApplyUserInfoOverrides for detail + on how to allow setting values on a per entry basis. + + + The current group name. + + + + + Get the archive's record size. Tar archives are composed of + a series of RECORDS each containing a number of BLOCKS. + This allowed tar archives to match the IO characteristics of + the physical device being used. Archives are expected + to be properly "blocked". + + + The record size this archive is using. + + + + + Sets the IsStreamOwner property on the underlying stream. + Set this to false to prevent the Close of the TarArchive from closing the stream. + + + + + Close the archive. + + + + + Perform the "list" command for the archive contents. + + NOTE That this method uses the progress event to actually list + the contents. If the progress display event is not set, nothing will be listed! + + + + + Perform the "extract" command and extract the contents of the archive. + + + The destination directory into which to extract. + + + + + Extract an entry from the archive. This method assumes that the + tarIn stream has been properly set with a call to GetNextEntry(). + + + The destination directory into which to extract. + + + The TarEntry returned by tarIn.GetNextEntry(). + + + + + Write an entry to the archive. This method will call the putNextEntry + and then write the contents of the entry, and finally call closeEntry() + for entries that are files. For directories, it will call putNextEntry(), + and then, if the recurse flag is true, process each entry that is a + child of the directory. + + + The TarEntry representing the entry to write to the archive. + + + If true, process the children of directory entries. + + + + + Write an entry to the archive. This method will call the putNextEntry + and then write the contents of the entry, and finally call closeEntry() + for entries that are files. For directories, it will call putNextEntry(), + and then, if the recurse flag is true, process each entry that is a + child of the directory. + + + The TarEntry representing the entry to write to the archive. + + + If true, process the children of directory entries. + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Releases the unmanaged resources used by the FileStream and optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only unmanaged resources. + + + + Closes the archive and releases any associated resources. + + + + + Ensures that resources are freed and other cleanup operations are performed + when the garbage collector reclaims the . + + + + + The TarBuffer class implements the tar archive concept + of a buffered input stream. This concept goes back to the + days of blocked tape drives and special io devices. In the + C# universe, the only real function that this class + performs is to ensure that files have the correct "record" + size, or other tars will complain. +

+ You should never have a need to access this class directly. + TarBuffers are created by Tar IO Streams. +

+
+
+ + + The size of a block in a tar archive in bytes. + + This is 512 bytes. + + + + The number of blocks in a default record. + + + The default value is 20 blocks per record. + + + + + The size in bytes of a default record. + + + The default size is 10KB. + + + + + Get the record size for this buffer + + The record size in bytes. + This is equal to the multiplied by the + + + + Get the TAR Buffer's record size. + + The record size in bytes. + This is equal to the multiplied by the + + + + Get the Blocking factor for the buffer + + This is the number of blocks in each record. + + + + Get the TAR Buffer's block factor + + The block factor; the number of blocks per record. + + + + Construct a default TarBuffer + + + + + Create TarBuffer for reading with default BlockFactor + + Stream to buffer + A new suitable for input. + + + + Construct TarBuffer for reading inputStream setting BlockFactor + + Stream to buffer + Blocking factor to apply + A new suitable for input. + + + + Construct TarBuffer for writing with default BlockFactor + + output stream for buffer + A new suitable for output. + + + + Construct TarBuffer for writing Tar output to streams. + + Output stream to write to. + Blocking factor to apply + A new suitable for output. + + + + Initialization common to all constructors. + + + + + Determine if an archive block indicates End of Archive. End of + archive is indicated by a block that consists entirely of null bytes. + All remaining blocks for the record should also be null's + However some older tars only do a couple of null blocks (Old GNU tar for one) + and also partial records + + The data block to check. + Returns true if the block is an EOF block; false otherwise. + + + + Determine if an archive block indicates the End of an Archive has been reached. + End of archive is indicated by a block that consists entirely of null bytes. + All remaining blocks for the record should also be null's + However some older tars only do a couple of null blocks (Old GNU tar for one) + and also partial records + + The data block to check. + Returns true if the block is an EOF block; false otherwise. + + + + Skip over a block on the input stream. + + + + + Read a block from the input stream. + + + The block of data read. + + + + + Read a record from data stream. + + + false if End-Of-File, else true. + + + + + Get the current block number, within the current record, zero based. + + Block numbers are zero based values + + + + + Gets or sets a flag indicating ownership of underlying stream. + When the flag is true will close the underlying stream also. + + The default value is true. + + + + Get the current block number, within the current record, zero based. + + + The current zero based block number. + + + The absolute block number = (record number * block factor) + block number. + + + + + Get the current record number. + + + The current zero based record number. + + + + + Get the current record number. + + + The current zero based record number. + + + + + Write a block of data to the archive. + + + The data to write to the archive. + + + + + Write an archive record to the archive, where the record may be + inside of a larger array buffer. The buffer must be "offset plus + record size" long. + + + The buffer containing the record data to write. + + + The offset of the record data within buffer. + + + + + Write a TarBuffer record to the archive. + + + + + WriteFinalRecord writes the current record buffer to output any unwritten data is present. + + Any trailing bytes are set to zero which is by definition correct behaviour + for the end of a tar stream. + + + + Close the TarBuffer. If this is an output buffer, also flush the + current block before closing. + + + + + This class represents an entry in a Tar archive. It consists + of the entry's header, as well as the entry's File. Entries + can be instantiated in one of three ways, depending on how + they are to be used. +

+ TarEntries that are created from the header bytes read from + an archive are instantiated with the TarEntry( byte[] ) + constructor. These entries will be used when extracting from + or listing the contents of an archive. These entries have their + header filled in using the header bytes. They also set the File + to null, since they reference an archive entry not a file.

+

+ TarEntries that are created from files that are to be written + into an archive are instantiated with the CreateEntryFromFile(string) + pseudo constructor. These entries have their header filled in using + the File's information. They also keep a reference to the File + for convenience when writing entries.

+

+ Finally, TarEntries can be constructed from nothing but a name. + This allows the programmer to construct the entry by hand, for + instance when only an InputStream is available for writing to + the archive, and the header information is constructed from + other information. In this case the header fields are set to + defaults and the File is set to null.

+ +
+
+ + + Initialise a default instance of . + + + + + Construct an entry from an archive's header bytes. File is set + to null. + + + The header bytes from a tar archive entry. + + + + + Construct a TarEntry using the header provided + + Header details for entry + + + + Clone this tar entry. + + Returns a clone of this entry. + + + + Construct an entry with only a name. + This allows the programmer to construct the entry's header "by hand". + + The name to use for the entry + Returns the newly created + + + + Construct an entry for a file. File is set to file, and the + header is constructed from information from the file. + + The file name that the entry represents. + Returns the newly created + + + + Determine if the two entries are equal. Equality is determined + by the header names being equal. + + The to compare with the current Object. + + True if the entries are equal; false if not. + + + + + Derive a Hash value for the current + + A Hash code for the current + + + + Determine if the given entry is a descendant of this entry. + Descendancy is determined by the name of the descendant + starting with this entry's name. + + + Entry to be checked as a descendent of this. + + + True if entry is a descendant of this. + + + + + Get this entry's header. + + + This entry's TarHeader. + + + + + Get/Set this entry's name. + + + + + Get/set this entry's user id. + + + + + Get/set this entry's group id. + + + + + Get/set this entry's user name. + + + + + Get/set this entry's group name. + + + + + Convenience method to set this entry's group and user ids. + + + This entry's new user id. + + + This entry's new group id. + + + + + Convenience method to set this entry's group and user names. + + + This entry's new user name. + + + This entry's new group name. + + + + + Get/Set the modification time for this entry + + + + + Get this entry's file. + + + This entry's file. + + + + + Get/set this entry's recorded file size. + + + + + Return true if this entry represents a directory, false otherwise + + + True if this entry is a directory. + + + + + Fill in a TarHeader with information from a File. + + + The TarHeader to fill in. + + + The file from which to get the header information. + + + + + Get entries for all files present in this entries directory. + If this entry doesnt represent a directory zero entries are returned. + + + An array of TarEntry's for this entry's children. + + + + + Write an entry's header information to a header buffer. + + + The tar entry header buffer to fill in. + + + + + Convenience method that will modify an entry's name directly + in place in an entry header buffer byte array. + + + The buffer containing the entry header to modify. + + + The new name to place into the header buffer. + + + + + Fill in a TarHeader given only the entry's name. + + + The TarHeader to fill in. + + + The tar entry name. + + + + + The name of the file this entry represents or null if the entry is not based on a file. + + + + + The entry's header information. + + + + + TarException represents exceptions specific to Tar classes and code. + + + + + Initialise a new instance of . + + + + + Initialise a new instance of with its message string. + + A that describes the error. + + + + Initialise a new instance of . + + A that describes the error. + The that caused this exception. + + + + Initializes a new instance of the TarException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + Reads the extended header of a Tar stream + + + + + Creates a new . + + + + + Read bytes from + + + + + + + Returns the parsed headers as key-value strings + + + + + This class encapsulates the Tar Entry Header used in Tar Archives. + The class also holds a number of tar constants, used mostly in headers. + + + The tar format and its POSIX successor PAX have a long history which makes for compatability + issues when creating and reading files. + + This is further complicated by a large number of programs with variations on formats + One common issue is the handling of names longer than 100 characters. + GNU style long names are currently supported. + + This is the ustar (Posix 1003.1) header. + + struct header + { + char t_name[100]; // 0 Filename + char t_mode[8]; // 100 Permissions + char t_uid[8]; // 108 Numerical User ID + char t_gid[8]; // 116 Numerical Group ID + char t_size[12]; // 124 Filesize + char t_mtime[12]; // 136 st_mtime + char t_chksum[8]; // 148 Checksum + char t_typeflag; // 156 Type of File + char t_linkname[100]; // 157 Target of Links + char t_magic[6]; // 257 "ustar" or other... + char t_version[2]; // 263 Version fixed to 00 + char t_uname[32]; // 265 User Name + char t_gname[32]; // 297 Group Name + char t_devmajor[8]; // 329 Major for devices + char t_devminor[8]; // 337 Minor for devices + char t_prefix[155]; // 345 Prefix for t_name + char t_mfill[12]; // 500 Filler up to 512 + }; + + + + + The length of the name field in a header buffer. + + + + + The length of the mode field in a header buffer. + + + + + The length of the user id field in a header buffer. + + + + + The length of the group id field in a header buffer. + + + + + The length of the checksum field in a header buffer. + + + + + Offset of checksum in a header buffer. + + + + + The length of the size field in a header buffer. + + + + + The length of the magic field in a header buffer. + + + + + The length of the version field in a header buffer. + + + + + The length of the modification time field in a header buffer. + + + + + The length of the user name field in a header buffer. + + + + + The length of the group name field in a header buffer. + + + + + The length of the devices field in a header buffer. + + + + + The length of the name prefix field in a header buffer. + + + + + The "old way" of indicating a normal file. + + + + + Normal file type. + + + + + Link file type. + + + + + Symbolic link file type. + + + + + Character device file type. + + + + + Block device file type. + + + + + Directory file type. + + + + + FIFO (pipe) file type. + + + + + Contiguous file type. + + + + + Posix.1 2001 global extended header + + + + + Posix.1 2001 extended header + + + + + Solaris access control list file type + + + + + GNU dir dump file type + This is a dir entry that contains the names of files that were in the + dir at the time the dump was made + + + + + Solaris Extended Attribute File + + + + + Inode (metadata only) no file content + + + + + Identifies the next file on the tape as having a long link name + + + + + Identifies the next file on the tape as having a long name + + + + + Continuation of a file that began on another volume + + + + + For storing filenames that dont fit in the main header (old GNU) + + + + + GNU Sparse file + + + + + GNU Tape/volume header ignore on extraction + + + + + The magic tag representing a POSIX tar archive. (would be written with a trailing NULL) + + + + + The magic tag representing an old GNU tar archive where version is included in magic and overwrites it + + + + + Initialise a default TarHeader instance + + + + + Get/set the name for this tar entry. + + Thrown when attempting to set the property to null. + + + + Get the name of this entry. + + The entry's name. + + + + Get/set the entry's Unix style permission mode. + + + + + The entry's user id. + + + This is only directly relevant to unix systems. + The default is zero. + + + + + Get/set the entry's group id. + + + This is only directly relevant to linux/unix systems. + The default value is zero. + + + + + Get/set the entry's size. + + Thrown when setting the size to less than zero. + + + + Get/set the entry's modification time. + + + The modification time is only accurate to within a second. + + Thrown when setting the date time to less than 1/1/1970. + + + + Get the entry's checksum. This is only valid/updated after writing or reading an entry. + + + + + Get value of true if the header checksum is valid, false otherwise. + + + + + Get/set the entry's type flag. + + + + + The entry's link name. + + Thrown when attempting to set LinkName to null. + + + + Get/set the entry's magic tag. + + Thrown when attempting to set Magic to null. + + + + The entry's version. + + Thrown when attempting to set Version to null. + + + + The entry's user name. + + + + + Get/set the entry's group name. + + + This is only directly relevant to unix systems. + + + + + Get/set the entry's major device number. + + + + + Get/set the entry's minor device number. + + + + + Create a new that is a copy of the current instance. + + A new that is a copy of the current instance. + + + + Parse TarHeader information from a header buffer. + + + The tar entry header buffer to get information from. + + + + + 'Write' header information to buffer provided, updating the check sum. + + output buffer for header information + + + + Get a hash code for the current object. + + A hash code for the current object. + + + + Determines if this instance is equal to the specified object. + + The object to compare with. + true if the objects are equal, false otherwise. + + + + Set defaults for values used when constructing a TarHeader instance. + + Value to apply as a default for userId. + Value to apply as a default for userName. + Value to apply as a default for groupId. + Value to apply as a default for groupName. + + + + Parse an octal string from a header buffer. + + The header buffer from which to parse. + The offset into the buffer from which to parse. + The number of header bytes to parse. + The long equivalent of the octal string. + + + + Parse a name from a header buffer. + + + The header buffer from which to parse. + + + The offset into the buffer from which to parse. + + + The number of header bytes to parse. + + + The name parsed. + + + + + Add name to the buffer as a collection of bytes + + The name to add + The offset of the first character + The buffer to add to + The index of the first byte to add + The number of characters/bytes to add + The next free index in the + + + + Add name to the buffer as a collection of bytes + + The name to add + The offset of the first character + The buffer to add to + The index of the first byte to add + The number of characters/bytes to add + The next free index in the + + + + Add an entry name to the buffer + + + The name to add + + + The buffer to add to + + + The offset into the buffer from which to start adding + + + The number of header bytes to add + + + The index of the next free byte in the buffer + + + + + Add an entry name to the buffer + + The name to add + The buffer to add to + The offset into the buffer from which to start adding + The number of header bytes to add + The index of the next free byte in the buffer + + + + Add a string to a buffer as a collection of ascii bytes. + + The string to add + The offset of the first character to add. + The buffer to add to. + The offset to start adding at. + The number of ascii characters to add. + The next free index in the buffer. + + + + Put an octal representation of a value into a buffer + + + the value to be converted to octal + + + buffer to store the octal string + + + The offset into the buffer where the value starts + + + The length of the octal string to create + + + The offset of the character next byte after the octal string + + + + + Put an octal or binary representation of a value into a buffer + + Value to be convert to octal + The buffer to update + The offset into the buffer to store the value + The length of the octal string. Must be 12. + Index of next byte + + + + Add the checksum integer to header buffer. + + + The header buffer to set the checksum for + The offset into the buffer for the checksum + The number of header bytes to update. + It's formatted differently from the other fields: it has 6 digits, a + null, then a space -- rather than digits, a space, then a null. + The final space is already there, from checksumming + + The modified buffer offset + + + + Compute the checksum for a tar entry header. + The checksum field must be all spaces prior to this happening + + The tar entry's header buffer. + The computed checksum. + + + + Make a checksum for a tar entry ignoring the checksum contents. + + The tar entry's header buffer. + The checksum for the buffer + + + + The TarInputStream reads a UNIX tar archive as an InputStream. + methods are provided to position at each successive entry in + the archive, and the read each entry as a normal input stream + using read(). + + + + + Construct a TarInputStream with default block factor + + stream to source data from + + + + Construct a TarInputStream with user specified block factor + + stream to source data from + block factor to apply to archive + + + + Gets or sets a flag indicating ownership of underlying stream. + When the flag is true will close the underlying stream also. + + The default value is true. + + + + Gets a value indicating whether the current stream supports reading + + + + + Gets a value indicating whether the current stream supports seeking + This property always returns false. + + + + + Gets a value indicating if the stream supports writing. + This property always returns false. + + + + + The length in bytes of the stream + + + + + Gets or sets the position within the stream. + Setting the Position is not supported and throws a NotSupportedExceptionNotSupportedException + + Any attempt to set position + + + + Flushes the baseInputStream + + + + + Set the streams position. This operation is not supported and will throw a NotSupportedException + + The offset relative to the origin to seek to. + The to start seeking from. + The new position in the stream. + Any access + + + + Sets the length of the stream + This operation is not supported and will throw a NotSupportedException + + The new stream length. + Any access + + + + Writes a block of bytes to this stream using data from a buffer. + This operation is not supported and will throw a NotSupportedException + + The buffer containing bytes to write. + The offset in the buffer of the frist byte to write. + The number of bytes to write. + Any access + + + + Writes a byte to the current position in the file stream. + This operation is not supported and will throw a NotSupportedException + + The byte value to write. + Any access + + + + Reads a byte from the current tar archive entry. + + A byte cast to an int; -1 if the at the end of the stream. + + + + Reads bytes from the current tar archive entry. + + This method is aware of the boundaries of the current + entry in the archive and will deal with them appropriately + + + The buffer into which to place bytes read. + + + The offset at which to place bytes read. + + + The number of bytes to read. + + + The number of bytes read, or 0 at end of stream/EOF. + + + + + Closes this stream. Calls the TarBuffer's close() method. + The underlying stream is closed by the TarBuffer. + + + + + Set the entry factory for this instance. + + The factory for creating new entries + + + + Get the record size being used by this stream's TarBuffer. + + + + + Get the record size being used by this stream's TarBuffer. + + + TarBuffer record size. + + + + + Get the available data that can be read from the current + entry in the archive. This does not indicate how much data + is left in the entire archive, only in the current entry. + This value is determined from the entry's size header field + and the amount of data already read from the current entry. + + + The number of available bytes for the current entry. + + + + + Skip bytes in the input buffer. This skips bytes in the + current entry's data, not the entire archive, and will + stop at the end of the current entry's data if the number + to skip extends beyond that point. + + + The number of bytes to skip. + + + + + Return a value of true if marking is supported; false otherwise. + + Currently marking is not supported, the return value is always false. + + + + Since we do not support marking just yet, we do nothing. + + + The limit to mark. + + + + + Since we do not support marking just yet, we do nothing. + + + + + Get the next entry in this tar archive. This will skip + over any remaining data in the current entry, if there + is one, and place the input stream at the header of the + next entry, and read the header and instantiate a new + TarEntry from the header bytes and return that entry. + If there are no more entries in the archive, null will + be returned to indicate that the end of the archive has + been reached. + + + The next TarEntry in the archive, or null. + + + + + Copies the contents of the current tar archive entry directly into + an output stream. + + + The OutputStream into which to write the entry's data. + + + + + This interface is provided, along with the method , to allow + the programmer to have their own subclass instantiated for the + entries return from . + + + + + Create an entry based on name alone + + + Name of the new EntryPointNotFoundException to create + + created TarEntry or descendant class + + + + Create an instance based on an actual file + + + Name of file to represent in the entry + + + Created TarEntry or descendant class + + + + + Create a tar entry based on the header information passed + + + Buffer containing header information to create an an entry from. + + + Created TarEntry or descendant class + + + + + Standard entry factory class creating instances of the class TarEntry + + + + + Create a based on named + + The name to use for the entry + A new + + + + Create a tar entry with details obtained from file + + The name of the file to retrieve details from. + A new + + + + Create an entry based on details in header + + The buffer containing entry details. + A new + + + + Flag set when last block has been read + + + + + Size of this entry as recorded in header + + + + + Number of bytes read for this entry so far + + + + + Buffer used with calls to Read() + + + + + Working buffer + + + + + Current entry being read + + + + + Factory used to create TarEntry or descendant class instance + + + + + Stream used as the source of input data. + + + + + The TarOutputStream writes a UNIX tar archive as an OutputStream. + Methods are provided to put entries, and then write their contents + by writing to this stream using write(). + + public + + + + Construct TarOutputStream using default block factor + + stream to write to + + + + Construct TarOutputStream with user specified block factor + + stream to write to + blocking factor + + + + Gets or sets a flag indicating ownership of underlying stream. + When the flag is true will close the underlying stream also. + + The default value is true. + + + + true if the stream supports reading; otherwise, false. + + + + + true if the stream supports seeking; otherwise, false. + + + + + true if stream supports writing; otherwise, false. + + + + + length of stream in bytes + + + + + gets or sets the position within the current stream. + + + + + set the position within the current stream + + The offset relative to the to seek to + The to seek from. + The new position in the stream. + + + + Set the length of the current stream + + The new stream length. + + + + Read a byte from the stream and advance the position within the stream + by one byte or returns -1 if at the end of the stream. + + The byte value or -1 if at end of stream + + + + read bytes from the current stream and advance the position within the + stream by the number of bytes read. + + The buffer to store read bytes in. + The index into the buffer to being storing bytes at. + The desired number of bytes to read. + The total number of bytes read, or zero if at the end of the stream. + The number of bytes may be less than the count + requested if data is not avialable. + + + + All buffered data is written to destination + + + + + Ends the TAR archive without closing the underlying OutputStream. + The result is that the EOF block of nulls is written. + + + + + Ends the TAR archive and closes the underlying OutputStream. + + This means that Finish() is called followed by calling the + TarBuffer's Close(). + + + + Get the record size being used by this stream's TarBuffer. + + + + + Get the record size being used by this stream's TarBuffer. + + + The TarBuffer record size. + + + + + Get a value indicating wether an entry is open, requiring more data to be written. + + + + + Put an entry on the output stream. This writes the entry's + header and positions the output stream for writing + the contents of the entry. Once this method is called, the + stream is ready for calls to write() to write the entry's + contents. Once the contents are written, closeEntry() + MUST be called to ensure that all buffered data + is completely written to the output stream. + + + The TarEntry to be written to the archive. + + + + + Close an entry. This method MUST be called for all file + entries that contain data. The reason is that we must + buffer data written to the stream in order to satisfy + the buffer's block based writes. Thus, there may be + data fragments still being assembled that must be written + to the output stream before this entry is closed and the + next entry written. + + + + + Writes a byte to the current tar archive entry. + This method simply calls Write(byte[], int, int). + + + The byte to be written. + + + + + Writes bytes to the current tar archive entry. This method + is aware of the current entry and will throw an exception if + you attempt to write bytes past the length specified for the + current entry. The method is also (painfully) aware of the + record buffering required by TarBuffer, and manages buffers + that are not a multiple of recordsize in length, including + assembling records from small buffers. + + + The buffer to write to the archive. + + + The offset in the buffer from which to get bytes. + + + The number of bytes to write. + + + + + Write an EOF (end of archive) block to the tar archive. + The end of the archive is indicated by two blocks consisting entirely of zero bytes. + + + + + bytes written for this entry so far + + + + + current 'Assembly' buffer length + + + + + Flag indicating wether this instance has been closed or not. + + + + + Size for the current entry + + + + + single block working buffer + + + + + 'Assembly' buffer used to assemble data before writing + + + + + TarBuffer used to provide correct blocking factor + + + + + the destination stream for the archive contents + + + + + This is the Deflater class. The deflater class compresses input + with the deflate algorithm described in RFC 1951. It has several + compression levels and three different strategies described below. + + This class is not thread safe. This is inherent in the API, due + to the split of deflate and setInput. + + author of the original java version : Jochen Hoenicke + + + + + The best and slowest compression level. This tries to find very + long and distant string repetitions. + + + + + The worst but fastest compression level. + + + + + The default compression level. + + + + + This level won't compress at all but output uncompressed blocks. + + + + + The compression method. This is the only method supported so far. + There is no need to use this constant at all. + + + + + Compression Level as an enum for safer use + + + + + The best and slowest compression level. This tries to find very + long and distant string repetitions. + + + + + The worst but fastest compression level. + + + + + The default compression level. + + + + + This level won't compress at all but output uncompressed blocks. + + + + + The compression method. This is the only method supported so far. + There is no need to use this constant at all. + + + + + Creates a new deflater with default compression level. + + + + + Creates a new deflater with given compression level. + + + the compression level, a value between NO_COMPRESSION + and BEST_COMPRESSION, or DEFAULT_COMPRESSION. + + if lvl is out of range. + + + + Creates a new deflater with given compression level. + + + the compression level, a value between NO_COMPRESSION + and BEST_COMPRESSION. + + + true, if we should suppress the Zlib/RFC1950 header at the + beginning and the adler checksum at the end of the output. This is + useful for the GZIP/PKZIP formats. + + if lvl is out of range. + + + + Resets the deflater. The deflater acts afterwards as if it was + just created with the same compression level and strategy as it + had before. + + + + + Gets the current adler checksum of the data that was processed so far. + + + + + Gets the number of input bytes processed so far. + + + + + Gets the number of output bytes so far. + + + + + Flushes the current input block. Further calls to deflate() will + produce enough output to inflate everything in the current input + block. This is not part of Sun's JDK so I have made it package + private. It is used by DeflaterOutputStream to implement + flush(). + + + + + Finishes the deflater with the current input block. It is an error + to give more input after this method was called. This method must + be called to force all bytes to be flushed. + + + + + Returns true if the stream was finished and no more output bytes + are available. + + + + + Returns true, if the input buffer is empty. + You should then call setInput(). + NOTE: This method can also return true when the stream + was finished. + + + + + Sets the data which should be compressed next. This should be only + called when needsInput indicates that more input is needed. + If you call setInput when needsInput() returns false, the + previous input that is still pending will be thrown away. + The given byte array should not be changed, before needsInput() returns + true again. + This call is equivalent to setInput(input, 0, input.length). + + + the buffer containing the input data. + + + if the buffer was finished() or ended(). + + + + + Sets the data which should be compressed next. This should be + only called when needsInput indicates that more input is needed. + The given byte array should not be changed, before needsInput() returns + true again. + + + the buffer containing the input data. + + + the start of the data. + + + the number of data bytes of input. + + + if the buffer was Finish()ed or if previous input is still pending. + + + + + Sets the compression level. There is no guarantee of the exact + position of the change, but if you call this when needsInput is + true the change of compression level will occur somewhere near + before the end of the so far given input. + + + the new compression level. + + + + + Get current compression level + + Returns the current compression level + + + + Sets the compression strategy. Strategy is one of + DEFAULT_STRATEGY, HUFFMAN_ONLY and FILTERED. For the exact + position where the strategy is changed, the same as for + SetLevel() applies. + + + The new compression strategy. + + + + + Deflates the current input block with to the given array. + + + The buffer where compressed data is stored + + + The number of compressed bytes added to the output, or 0 if either + IsNeedingInput() or IsFinished returns true or length is zero. + + + + + Deflates the current input block to the given array. + + + Buffer to store the compressed data. + + + Offset into the output array. + + + The maximum number of bytes that may be stored. + + + The number of compressed bytes added to the output, or 0 if either + needsInput() or finished() returns true or length is zero. + + + If Finish() was previously called. + + + If offset or length don't match the array length. + + + + + Sets the dictionary which should be used in the deflate process. + This call is equivalent to setDictionary(dict, 0, dict.Length). + + + the dictionary. + + + if SetInput () or Deflate () were already called or another dictionary was already set. + + + + + Sets the dictionary which should be used in the deflate process. + The dictionary is a byte array containing strings that are + likely to occur in the data which should be compressed. The + dictionary is not stored in the compressed output, only a + checksum. To decompress the output you need to supply the same + dictionary again. + + + The dictionary data + + + The index where dictionary information commences. + + + The number of bytes in the dictionary. + + + If SetInput () or Deflate() were already called or another dictionary was already set. + + + + + Compression level. + + + + + If true no Zlib/RFC1950 headers or footers are generated + + + + + The current state. + + + + + The total bytes of output written. + + + + + The pending output. + + + + + The deflater engine. + + + + + This class contains constants used for deflation. + + + + + Set to true to enable debugging + + + + + Written to Zip file to identify a stored block + + + + + Identifies static tree in Zip file + + + + + Identifies dynamic tree in Zip file + + + + + Header flag indicating a preset dictionary for deflation + + + + + Sets internal buffer sizes for Huffman encoding + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Strategies for deflater + + + + + The default strategy + + + + + This strategy will only allow longer string repetitions. It is + useful for random data with a small character set. + + + + + This strategy will not look for string repetitions at all. It + only encodes with Huffman trees (which means, that more common + characters get a smaller encoding. + + + + + Low level compression engine for deflate algorithm which uses a 32K sliding window + with secondary compression from Huffman/Shannon-Fano codes. + + + + + Construct instance with pending buffer + Adler calculation will be peformed + + + Pending buffer to use + + + + + Construct instance with pending buffer + + + Pending buffer to use + + + If no adler calculation should be performed + + + + + Deflate drives actual compression of data + + True to flush input buffers + Finish deflation with the current input. + Returns true if progress has been made. + + + + Sets input data to be deflated. Should only be called when NeedsInput() + returns true + + The buffer containing input data. + The offset of the first byte of data. + The number of bytes of data to use as input. + + + + Determines if more input is needed. + + Return true if input is needed via SetInput + + + + Set compression dictionary + + The buffer containing the dictionary data + The offset in the buffer for the first byte of data + The length of the dictionary data. + + + + Reset internal state + + + + + Reset Adler checksum + + + + + Get current value of Adler checksum + + + + + Total data processed + + + + + Get/set the deflate strategy + + + + + Set the deflate level (0-9) + + The value to set the level to. + + + + Fill the window + + + + + Inserts the current string in the head hash and returns the previous + value for this hash. + + The previous hash value + + + + Find the best (longest) string in the window matching the + string starting at strstart. + + Preconditions: + + strstart + DeflaterConstants.MAX_MATCH <= window.length. + + + True if a match greater than the minimum length is found + + + + Hashtable, hashing three characters to an index for window, so + that window[index]..window[index+2] have this hash code. + Note that the array should really be unsigned short, so you need + to and the values with 0xffff. + + + + + prev[index & WMASK] points to the previous index that has the + same hash code as the string starting at index. This way + entries with the same hash code are in a linked list. + Note that the array should really be unsigned short, so you need + to and the values with 0xffff. + + + + + Points to the current character in the window. + + + + + lookahead is the number of characters starting at strstart in + window that are valid. + So window[strstart] until window[strstart+lookahead-1] are valid + characters. + + + + + This array contains the part of the uncompressed stream that + is of relevance. The current character is indexed by strstart. + + + + + The current compression function. + + + + + The input data for compression. + + + + + The total bytes of input read. + + + + + The offset into inputBuf, where input data starts. + + + + + The end offset of the input data. + + + + + The adler checksum + + + + + This is the DeflaterHuffman class. + + This class is not thread safe. This is inherent in the API, due + to the split of Deflate and SetInput. + + author of the original java version : Jochen Hoenicke + + + + + Resets the internal state of the tree + + + + + Check that all frequencies are zero + + + At least one frequency is non-zero + + + + + Set static codes and length + + new codes + length for new codes + + + + Build dynamic codes and lengths + + + + + Get encoded length + + Encoded length, the sum of frequencies * lengths + + + + Scan a literal or distance tree to determine the frequencies of the codes + in the bit length tree. + + + + + Write tree values + + Tree to write + + + + Pending buffer to use + + + + + Construct instance with pending buffer + + Pending buffer to use + + + + Reset internal state + + + + + Write all trees to pending buffer + + The number/rank of treecodes to send. + + + + Compress current buffer writing data to pending buffer + + + + + Flush block to output with no compression + + Data to write + Index of first byte to write + Count of bytes to write + True if this is the last block + + + + Flush block to output with compression + + Data to flush + Index of first byte to flush + Count of bytes to flush + True if this is the last block + + + + Get value indicating if internal buffer is full + + true if buffer is full + + + + Add literal to buffer + + Literal value to add to buffer. + Value indicating internal buffer is full + + + + Add distance code and length to literal and distance trees + + Distance code + Length + Value indicating if internal buffer is full + + + + Reverse the bits of a 16 bit value. + + Value to reverse bits + Value with bits reversed + + + + This class stores the pending output of the Deflater. + + author of the original java version : Jochen Hoenicke + + + + + Construct instance with default buffer size + + + + + Inflater is used to decompress data that has been compressed according + to the "deflate" standard described in rfc1951. + + By default Zlib (rfc1950) headers and footers are expected in the input. + You can use constructor public Inflater(bool noHeader) passing true + if there is no Zlib header information + + The usage is as following. First you have to set some input with + SetInput(), then Inflate() it. If inflate doesn't + inflate any bytes there may be three reasons: +
    +
  • IsNeedingInput() returns true because the input buffer is empty. + You have to provide more input with SetInput(). + NOTE: IsNeedingInput() also returns true when, the stream is finished. +
  • +
  • IsNeedingDictionary() returns true, you have to provide a preset + dictionary with SetDictionary().
  • +
  • IsFinished returns true, the inflater has finished.
  • +
+ Once the first output byte is produced, a dictionary will not be + needed at a later stage. + + author of the original java version : John Leuner, Jochen Hoenicke +
+
+ + + Copy lengths for literal codes 257..285 + + + + + Extra bits for literal codes 257..285 + + + + + Copy offsets for distance codes 0..29 + + + + + Extra bits for distance codes + + + + + These are the possible states for an inflater + + + + + This variable contains the current state. + + + + + The adler checksum of the dictionary or of the decompressed + stream, as it is written in the header resp. footer of the + compressed stream. + Only valid if mode is DECODE_DICT or DECODE_CHKSUM. + + + + + The number of bits needed to complete the current state. This + is valid, if mode is DECODE_DICT, DECODE_CHKSUM, + DECODE_HUFFMAN_LENBITS or DECODE_HUFFMAN_DISTBITS. + + + + + True, if the last block flag was set in the last block of the + inflated stream. This means that the stream ends after the + current block. + + + + + The total number of inflated bytes. + + + + + The total number of bytes set with setInput(). This is not the + value returned by the TotalIn property, since this also includes the + unprocessed input. + + + + + This variable stores the noHeader flag that was given to the constructor. + True means, that the inflated stream doesn't contain a Zlib header or + footer. + + + + + Creates a new inflater or RFC1951 decompressor + RFC1950/Zlib headers and footers will be expected in the input data + + + + + Creates a new inflater. + + + True if no RFC1950/Zlib header and footer fields are expected in the input data + + This is used for GZIPed/Zipped input. + + For compatibility with + Sun JDK you should provide one byte of input more than needed in + this case. + + + + + Resets the inflater so that a new stream can be decompressed. All + pending input and output will be discarded. + + + + + Decodes a zlib/RFC1950 header. + + + False if more input is needed. + + + The header is invalid. + + + + + Decodes the dictionary checksum after the deflate header. + + + False if more input is needed. + + + + + Decodes the huffman encoded symbols in the input stream. + + + false if more input is needed, true if output window is + full or the current block ends. + + + if deflated stream is invalid. + + + + + Decodes the adler checksum after the deflate stream. + + + false if more input is needed. + + + If checksum doesn't match. + + + + + Decodes the deflated stream. + + + false if more input is needed, or if finished. + + + if deflated stream is invalid. + + + + + Sets the preset dictionary. This should only be called, if + needsDictionary() returns true and it should set the same + dictionary, that was used for deflating. The getAdler() + function returns the checksum of the dictionary needed. + + + The dictionary. + + + + + Sets the preset dictionary. This should only be called, if + needsDictionary() returns true and it should set the same + dictionary, that was used for deflating. The getAdler() + function returns the checksum of the dictionary needed. + + + The dictionary. + + + The index into buffer where the dictionary starts. + + + The number of bytes in the dictionary. + + + No dictionary is needed. + + + The adler checksum for the buffer is invalid + + + + + Sets the input. This should only be called, if needsInput() + returns true. + + + the input. + + + + + Sets the input. This should only be called, if needsInput() + returns true. + + + The source of input data + + + The index into buffer where the input starts. + + + The number of bytes of input to use. + + + No input is needed. + + + The index and/or count are wrong. + + + + + Inflates the compressed stream to the output buffer. If this + returns 0, you should check, whether IsNeedingDictionary(), + IsNeedingInput() or IsFinished() returns true, to determine why no + further output is produced. + + + the output buffer. + + + The number of bytes written to the buffer, 0 if no further + output can be produced. + + + if buffer has length 0. + + + if deflated stream is invalid. + + + + + Inflates the compressed stream to the output buffer. If this + returns 0, you should check, whether needsDictionary(), + needsInput() or finished() returns true, to determine why no + further output is produced. + + + the output buffer. + + + the offset in buffer where storing starts. + + + the maximum number of bytes to output. + + + the number of bytes written to the buffer, 0 if no further output can be produced. + + + if count is less than 0. + + + if the index and / or count are wrong. + + + if deflated stream is invalid. + + + + + Returns true, if the input buffer is empty. + You should then call setInput(). + NOTE: This method also returns true when the stream is finished. + + + + + Returns true, if a preset dictionary is needed to inflate the input. + + + + + Returns true, if the inflater has finished. This means, that no + input is needed and no output can be produced. + + + + + Gets the adler checksum. This is either the checksum of all + uncompressed bytes returned by inflate(), or if needsDictionary() + returns true (and thus no output was yet produced) this is the + adler checksum of the expected dictionary. + + + the adler checksum. + + + + + Gets the total number of output bytes returned by Inflate(). + + + the total number of output bytes. + + + + + Gets the total number of processed compressed input bytes. + + + The total number of bytes of processed input bytes. + + + + + Gets the number of unprocessed input bytes. Useful, if the end of the + stream is reached and you want to further process the bytes after + the deflate stream. + + + The number of bytes of the input which have not been processed. + + + + + Continue decoding header from until more bits are needed or decoding has been completed + + Returns whether decoding could be completed + + + + Get literal/length huffman tree, must not be used before has returned true + + If hader has not been successfully read by the state machine + + + + Get distance huffman tree, must not be used before has returned true + + If hader has not been successfully read by the state machine + + + + Huffman tree used for inflation + + + + + Literal length tree + + + + + Distance tree + + + + + Constructs a Huffman tree from the array of code lengths. + + + the array of code lengths + + + + + Reads the next symbol from input. The symbol is encoded using the + huffman tree. + + + input the input source. + + + the next symbol, or -1 if not enough input is available. + + + + + This class is general purpose class for writing data to a buffer. + + It allows you to write bits as well as bytes + Based on DeflaterPending.java + + author of the original java version : Jochen Hoenicke + + + + + Internal work buffer + + + + + construct instance using default buffer size of 4096 + + + + + construct instance using specified buffer size + + + size to use for internal buffer + + + + + Clear internal state/buffers + + + + + Write a byte to buffer + + + The value to write + + + + + Write a short value to buffer LSB first + + + The value to write. + + + + + write an integer LSB first + + The value to write. + + + + Write a block of data to buffer + + data to write + offset of first byte to write + number of bytes to write + + + + The number of bits written to the buffer + + + + + Align internal buffer on a byte boundary + + + + + Write bits to internal buffer + + source of bits + number of bits to write + + + + Write a short value to internal buffer most significant byte first + + value to write + + + + Indicates if buffer has been flushed + + + + + Flushes the pending buffer into the given output array. If the + output array is to small, only a partial flush is done. + + The output array. + The offset into output array. + The maximum number of bytes to store. + The number of bytes flushed. + + + + Convert internal buffer to byte array. + Buffer is empty on completion + + + The internal buffer contents converted to a byte array. + + + + + A special stream deflating or compressing the bytes that are + written to it. It uses a Deflater to perform actual deflating.
+ Authors of the original java version : Tom Tromey, Jochen Hoenicke +
+
+ + + Creates a new DeflaterOutputStream with a default Deflater and default buffer size. + + + the output stream where deflated output should be written. + + + + + Creates a new DeflaterOutputStream with the given Deflater and + default buffer size. + + + the output stream where deflated output should be written. + + + the underlying deflater. + + + + + Creates a new DeflaterOutputStream with the given Deflater and + buffer size. + + + The output stream where deflated output is written. + + + The underlying deflater to use + + + The buffer size in bytes to use when deflating (minimum value 512) + + + bufsize is less than or equal to zero. + + + baseOutputStream does not support writing + + + deflater instance is null + + + + + Finishes the stream by calling finish() on the deflater. + + + Not all input is deflated + + + + + Gets or sets a flag indicating ownership of underlying stream. + When the flag is true will close the underlying stream also. + + The default value is true. + + + + Allows client to determine if an entry can be patched after its added + + + + + Returns the 10 byte AUTH CODE to be appended immediately following the AES data stream. + + + + + Get/set the password used for encryption. + + When set to null or if the password is empty no encryption is performed + + + + Encrypt a block of data + + + Data to encrypt. NOTE the original contents of the buffer are lost + + + Offset of first byte in buffer to encrypt + + + Number of bytes in buffer to encrypt + + + + + Initializes encryption keys based on given . + + The password. + + + + Initializes encryption keys based on given password. + + + + + Deflates everything in the input buffers. This will call + def.deflate() until all bytes from the input buffers + are processed. + + + + + Gets value indicating stream can be read from + + + + + Gets a value indicating if seeking is supported for this stream + This property always returns false + + + + + Get value indicating if this stream supports writing + + + + + Get current length of stream + + + + + Gets the current position within the stream. + + Any attempt to set position + + + + Sets the current position of this stream to the given value. Not supported by this class! + + The offset relative to the to seek. + The to seek from. + The new position in the stream. + Any access + + + + Sets the length of this stream to the given value. Not supported by this class! + + The new stream length. + Any access + + + + Read a byte from stream advancing position by one + + The byte read cast to an int. THe value is -1 if at the end of the stream. + Any access + + + + Read a block of bytes from stream + + The buffer to store read data in. + The offset to start storing at. + The maximum number of bytes to read. + The actual number of bytes read. Zero if end of stream is detected. + Any access + + + + Flushes the stream by calling Flush on the deflater and then + on the underlying stream. This ensures that all bytes are flushed. + + + + + Calls and closes the underlying + stream when is true. + + + + + Get the Auth code for AES encrypted entries + + + + + Writes a single byte to the compressed output stream. + + + The byte value. + + + + + Writes bytes from an array to the compressed stream. + + + The byte array + + + The offset into the byte array where to start. + + + The number of bytes to write. + + + + + This buffer is used temporarily to retrieve the bytes from the + deflater and write them to the underlying output stream. + + + + + The deflater which is used to deflate the stream. + + + + + Base stream the deflater depends on. + + + + + An input buffer customised for use by + + + The buffer supports decryption of incoming data. + + + + + Initialise a new instance of with a default buffer size + + The stream to buffer. + + + + Initialise a new instance of + + The stream to buffer. + The size to use for the buffer + A minimum buffer size of 1KB is permitted. Lower sizes are treated as 1KB. + + + + Get the length of bytes bytes in the + + + + + Get the contents of the raw data buffer. + + This may contain encrypted data. + + + + Get the number of useable bytes in + + + + + Get the contents of the clear text buffer. + + + + + Get/set the number of bytes available + + + + + Call passing the current clear text buffer contents. + + The inflater to set input for. + + + + Fill the buffer from the underlying input stream. + + + + + Read a buffer directly from the input stream + + The buffer to fill + Returns the number of bytes read. + + + + Read a buffer directly from the input stream + + The buffer to read into + The offset to start reading data into. + The number of bytes to read. + Returns the number of bytes read. + + + + Read clear text data from the input stream. + + The buffer to add data to. + The offset to start adding data at. + The number of bytes to read. + Returns the number of bytes actually read. + + + + Read a from the input stream. + + Returns the byte read. + + + + Read an in little endian byte order. + + The short value read case to an int. + + + + Read an in little endian byte order. + + The int value read. + + + + Read a in little endian byte order. + + The long value read. + + + + Get/set the to apply to any data. + + Set this value to null to have no transform applied. + + + + This filter stream is used to decompress data compressed using the "deflate" + format. The "deflate" format is described in RFC 1951. + + This stream may form the basis for other decompression filters, such + as the GZipInputStream. + + Author of the original java version : John Leuner. + + + + + Create an InflaterInputStream with the default decompressor + and a default buffer size of 4KB. + + + The InputStream to read bytes from + + + + + Create an InflaterInputStream with the specified decompressor + and a default buffer size of 4KB. + + + The source of input data + + + The decompressor used to decompress data read from baseInputStream + + + + + Create an InflaterInputStream with the specified decompressor + and the specified buffer size. + + + The InputStream to read bytes from + + + The decompressor to use + + + Size of the buffer to use + + + + + Gets or sets a flag indicating ownership of underlying stream. + When the flag is true will close the underlying stream also. + + The default value is true. + + + + Skip specified number of bytes of uncompressed data + + + Number of bytes to skip + + + The number of bytes skipped, zero if the end of + stream has been reached + + + The number of bytes to skip is less than or equal to zero. + + + + + Clear any cryptographic state. + + + + + Returns 0 once the end of the stream (EOF) has been reached. + Otherwise returns 1. + + + + + Fills the buffer with more data to decompress. + + + Stream ends early + + + + + Gets a value indicating whether the current stream supports reading + + + + + Gets a value of false indicating seeking is not supported for this stream. + + + + + Gets a value of false indicating that this stream is not writeable. + + + + + A value representing the length of the stream in bytes. + + + + + The current position within the stream. + Throws a NotSupportedException when attempting to set the position + + Attempting to set the position + + + + Flushes the baseInputStream + + + + + Sets the position within the current stream + Always throws a NotSupportedException + + The relative offset to seek to. + The defining where to seek from. + The new position in the stream. + Any access + + + + Set the length of the current stream + Always throws a NotSupportedException + + The new length value for the stream. + Any access + + + + Writes a sequence of bytes to stream and advances the current position + This method always throws a NotSupportedException + + Thew buffer containing data to write. + The offset of the first byte to write. + The number of bytes to write. + Any access + + + + Writes one byte to the current stream and advances the current position + Always throws a NotSupportedException + + The byte to write. + Any access + + + + Closes the input stream. When + is true the underlying stream is also closed. + + + + + Reads decompressed data into the provided buffer byte array + + + The array to read and decompress data into + + + The offset indicating where the data should be placed + + + The number of bytes to decompress + + The number of bytes read. Zero signals the end of stream + + Inflater needs a dictionary + + + + + Decompressor for this stream + + + + + Input buffer for this stream. + + + + + Base stream the inflater reads from. + + + + + The compressed size + + + + + Flag indicating wether this instance has been closed or not. + + + + + Contains the output from the Inflation process. + We need to have a window so that we can refer backwards into the output stream + to repeat stuff.
+ Author of the original java version : John Leuner +
+
+ + + Write a byte to this output window + + value to write + + if window is full + + + + + Append a byte pattern already in the window itself + + length of pattern to copy + distance from end of window pattern occurs + + If the repeated data overflows the window + + + + + Copy from input manipulator to internal window + + source of data + length of data to copy + the number of bytes copied + + + + Copy dictionary to window + + source dictionary + offset of start in source dictionary + length of dictionary + + If window isnt empty + + + + + Get remaining unfilled space in window + + Number of bytes left in window + + + + Get bytes available for output in window + + Number of bytes filled + + + + Copy contents of window to output + + buffer to copy to + offset to start at + number of bytes to count + The number of bytes copied + + If a window underflow occurs + + + + + Reset by clearing window so GetAvailable returns 0 + + + + + This class allows us to retrieve a specified number of bits from + the input buffer, as well as copy big byte blocks. + + It uses an int buffer to store up to 31 bits for direct + manipulation. This guarantees that we can get at least 16 bits, + but we only need at most 15, so this is all safe. + + There are some optimizations in this class, for example, you must + never peek more than 8 bits more than needed, and you must first + peek bits before you may drop them. This is not a general purpose + class but optimized for the behaviour of the Inflater. + + authors of the original java version : John Leuner, Jochen Hoenicke + + + + + Get the next sequence of bits but don't increase input pointer. bitCount must be + less or equal 16 and if this call succeeds, you must drop + at least n - 8 bits in the next call. + + The number of bits to peek. + + the value of the bits, or -1 if not enough bits available. */ + + + + + Tries to grab the next bits from the input and + sets to the value, adding . + + true if enough bits could be read, otherwise false + + + + Tries to grab the next bits from the input and + sets of to the value. + + true if enough bits could be read, otherwise false + + + + Drops the next n bits from the input. You should have called PeekBits + with a bigger or equal n before, to make sure that enough bits are in + the bit buffer. + + The number of bits to drop. + + + + Gets the next n bits and increases input pointer. This is equivalent + to followed by , except for correct error handling. + + The number of bits to retrieve. + + the value of the bits, or -1 if not enough bits available. + + + + + Gets the number of bits available in the bit buffer. This must be + only called when a previous PeekBits() returned -1. + + + the number of bits available. + + + + + Gets the number of bytes available. + + + The number of bytes available. + + + + + Skips to the next byte boundary. + + + + + Returns true when SetInput can be called + + + + + Copies bytes from input buffer to output buffer starting + at output[offset]. You have to make sure, that the buffer is + byte aligned. If not enough bytes are available, copies fewer + bytes. + + + The buffer to copy bytes to. + + + The offset in the buffer at which copying starts + + + The length to copy, 0 is allowed. + + + The number of bytes copied, 0 if no bytes were available. + + + Length is less than zero + + + Bit buffer isnt byte aligned + + + + + Resets state and empties internal buffers + + + + + Add more input for consumption. + Only call when IsNeedingInput returns true + + data to be input + offset of first byte of input + number of bytes of input to add. + + + + FastZipEvents supports all events applicable to FastZip operations. + + + + + Delegate to invoke when processing directories. + + + + + Delegate to invoke when processing files. + + + + + Delegate to invoke during processing of files. + + + + + Delegate to invoke when processing for a file has been completed. + + + + + Delegate to invoke when processing directory failures. + + + + + Delegate to invoke when processing file failures. + + + + + Raise the directory failure event. + + The directory causing the failure. + The exception for this event. + A boolean indicating if execution should continue or not. + + + + Fires the file failure handler delegate. + + The file causing the failure. + The exception for this failure. + A boolean indicating if execution should continue or not. + + + + Fires the ProcessFile delegate. + + The file being processed. + A boolean indicating if execution should continue or not. + + + + Fires the delegate + + The file whose processing has been completed. + A boolean indicating if execution should continue or not. + + + + Fires the process directory delegate. + + The directory being processed. + Flag indicating if the directory has matching files as determined by the current filter. + A of true if the operation should continue; false otherwise. + + + + The minimum timespan between events. + + The minimum period of time between events. + + The default interval is three seconds. + + + + FastZip provides facilities for creating and extracting zip files. + + + + + Defines the desired handling when overwriting files during extraction. + + + + + Prompt the user to confirm overwriting + + + + + Never overwrite files. + + + + + Always overwrite files. + + + + + Initialise a default instance of . + + + + + Initialise a new instance of + + The events to use during operations. + + + + Get/set a value indicating wether empty directories should be created. + + + + + Get / set the password value. + + + + + Get or set the active when creating Zip files. + + + + + + Get or set the active when creating Zip files. + + + + + Gets or sets the setting for Zip64 handling when writing. + + + The default value is dynamic which is not backwards compatible with old + programs and can cause problems with XP's built in compression which cant + read Zip64 archives. However it does avoid the situation were a large file + is added and cannot be completed correctly. + NOTE: Setting the size for entries before they are added is the best solution! + By default the EntryFactory used by FastZip will set fhe file size. + + + + + Get/set a value indicating wether file dates and times should + be restored when extracting files from an archive. + + The default value is false. + + + + Get/set a value indicating whether file attributes should + be restored during extract operations + + + + + Get/set the Compression Level that will be used + when creating the zip + + + + + Delegate called when confirming overwriting of files. + + + + + Create a zip file. + + The name of the zip file to create. + The directory to source files from. + True to recurse directories, false for no recursion. + The file filter to apply. + The directory filter to apply. + + + + Create a zip file/archive. + + The name of the zip file to create. + The directory to obtain files and directories from. + True to recurse directories, false for no recursion. + The file filter to apply. + + + + Create a zip archive sending output to the passed. + + The stream to write archive data to. + The directory to source files from. + True to recurse directories, false for no recursion. + The file filter to apply. + The directory filter to apply. + The is closed after creation. + + + + Extract the contents of a zip file. + + The zip file to extract from. + The directory to save extracted information in. + A filter to apply to files. + + + + Extract the contents of a zip file. + + The zip file to extract from. + The directory to save extracted information in. + The style of overwriting to apply. + A delegate to invoke when confirming overwriting. + A filter to apply to files. + A filter to apply to directories. + Flag indicating whether to restore the date and time for extracted files. + Allow parent directory traversal in file paths (e.g. ../file) + + + + Extract the contents of a zip file held in a stream. + + The seekable input stream containing the zip to extract from. + The directory to save extracted information in. + The style of overwriting to apply. + A delegate to invoke when confirming overwriting. + A filter to apply to files. + A filter to apply to directories. + Flag indicating whether to restore the date and time for extracted files. + Flag indicating whether the inputStream will be closed by this method. + Allow parent directory traversal in file paths (e.g. ../file) + + + + Defines factory methods for creating new values. + + + + + Create a for a file given its name + + The name of the file to create an entry for. + Returns a file entry based on the passed. + + + + Create a for a file given its name + + The name of the file to create an entry for. + If true get details from the file system if the file exists. + Returns a file entry based on the passed. + + + + Create a for a file given its actual name and optional override name + + The name of the file to create an entry for. + An alternative name to be used for the new entry. Null if not applicable. + If true get details from the file system if the file exists. + Returns a file entry based on the passed. + + + + Create a for a directory given its name + + The name of the directory to create an entry for. + Returns a directory entry based on the passed. + + + + Create a for a directory given its name + + The name of the directory to create an entry for. + If true get details from the file system for this directory if it exists. + Returns a directory entry based on the passed. + + + + Get/set the applicable. + + + + + WindowsNameTransform transforms names to windows compatible ones. + + + + + The maximum windows path name permitted. + + This may not valid for all windows systems - CE?, etc but I cant find the equivalent in the CLR. + + + + In this case we need Windows' invalid path characters. + Path.GetInvalidPathChars() only returns a subset invalid on all platforms. + + + + + Initialises a new instance of + + + Allow parent directory traversal in file paths (e.g. ../file) + + + + Initialise a default instance of + + + + + Gets or sets a value containing the target directory to prefix values with. + + + + + Allow parent directory traversal in file paths (e.g. ../file) + + + + + Gets or sets a value indicating wether paths on incoming values should be removed. + + + + + Transform a Zip directory name to a windows directory name. + + The directory name to transform. + The transformed name. + + + + Transform a Zip format file name to a windows style one. + + The file name to transform. + The transformed name. + + + + Test a name to see if it is a valid name for a windows filename as extracted from a Zip archive. + + The name to test. + Returns true if the name is a valid zip name; false otherwise. + The filename isnt a true windows path in some fundamental ways like no absolute paths, no rooted paths etc. + + + + Force a name to be valid by replacing invalid characters with a fixed value + + The name to make valid + The replacement character to use for any invalid characters. + Returns a valid name + + + + Gets or set the character to replace invalid characters during transformations. + + + + + Determines how entries are tested to see if they should use Zip64 extensions or not. + + + + + Zip64 will not be forced on entries during processing. + + An entry can have this overridden if required + + + + Zip64 should always be used. + + + + + #ZipLib will determine use based on entry values when added to archive. + + + + + The kind of compression used for an entry in an archive + + + + + A direct copy of the file contents is held in the archive + + + + + Common Zip compression method using a sliding dictionary + of up to 32KB and secondary compression from Huffman/Shannon-Fano trees + + + + + An extension to deflate with a 64KB window. Not supported by #Zip currently + + + + + BZip2 compression. Not supported by #Zip. + + + + + LZMA compression. Not supported by #Zip. + + + + + PPMd compression. Not supported by #Zip. + + + + + WinZip special for AES encryption, Now supported by #Zip. + + + + + Identifies the encryption algorithm used for an entry + + + + + No encryption has been used. + + + + + Encrypted using PKZIP 2.0 or 'classic' encryption. + + + + + DES encryption has been used. + + + + + RC2 encryption has been used for encryption. + + + + + Triple DES encryption with 168 bit keys has been used for this entry. + + + + + Triple DES with 112 bit keys has been used for this entry. + + + + + AES 128 has been used for encryption. + + + + + AES 192 has been used for encryption. + + + + + AES 256 has been used for encryption. + + + + + RC2 corrected has been used for encryption. + + + + + Blowfish has been used for encryption. + + + + + Twofish has been used for encryption. + + + + + RC4 has been used for encryption. + + + + + An unknown algorithm has been used for encryption. + + + + + Defines the contents of the general bit flags field for an archive entry. + + + + + Bit 0 if set indicates that the file is encrypted + + + + + Bits 1 and 2 - Two bits defining the compression method (only for Method 6 Imploding and 8,9 Deflating) + + + + + Bit 3 if set indicates a trailing data desciptor is appended to the entry data + + + + + Bit 4 is reserved for use with method 8 for enhanced deflation + + + + + Bit 5 if set indicates the file contains Pkzip compressed patched data. + Requires version 2.7 or greater. + + + + + Bit 6 if set indicates strong encryption has been used for this entry. + + + + + Bit 7 is currently unused + + + + + Bit 8 is currently unused + + + + + Bit 9 is currently unused + + + + + Bit 10 is currently unused + + + + + Bit 11 if set indicates the filename and + comment fields for this file must be encoded using UTF-8. + + + + + Bit 12 is documented as being reserved by PKware for enhanced compression. + + + + + Bit 13 if set indicates that values in the local header are masked to hide + their actual values, and the central directory is encrypted. + + + Used when encrypting the central directory contents. + + + + + Bit 14 is documented as being reserved for use by PKware + + + + + Bit 15 is documented as being reserved for use by PKware + + + + + This class contains constants used for Zip format files + + + + + The version made by field for entries in the central header when created by this library + + + This is also the Zip version for the library when comparing against the version required to extract + for an entry. See . + + + + + The version made by field for entries in the central header when created by this library + + + This is also the Zip version for the library when comparing against the version required to extract + for an entry. See ZipInputStream.CanDecompressEntry. + + + + + The minimum version required to support strong encryption + + + + + The minimum version required to support strong encryption + + + + + Version indicating AES encryption + + + + + The version required for Zip64 extensions (4.5 or higher) + + + + + Size of local entry header (excluding variable length fields at end) + + + + + Size of local entry header (excluding variable length fields at end) + + + + + Size of Zip64 data descriptor + + + + + Size of data descriptor + + + + + Size of data descriptor + + + + + Size of central header entry (excluding variable fields) + + + + + Size of central header entry + + + + + Size of end of central record (excluding variable fields) + + + + + Size of end of central record (excluding variable fields) + + + + + Size of 'classic' cryptographic header stored before any entry data + + + + + Size of cryptographic header stored before entry data + + + + + Signature for local entry header + + + + + Signature for local entry header + + + + + Signature for spanning entry + + + + + Signature for spanning entry + + + + + Signature for temporary spanning entry + + + + + Signature for temporary spanning entry + + + + + Signature for data descriptor + + + This is only used where the length, Crc, or compressed size isnt known when the + entry is created and the output stream doesnt support seeking. + The local entry cannot be 'patched' with the correct values in this case + so the values are recorded after the data prefixed by this header, as well as in the central directory. + + + + + Signature for data descriptor + + + This is only used where the length, Crc, or compressed size isnt known when the + entry is created and the output stream doesnt support seeking. + The local entry cannot be 'patched' with the correct values in this case + so the values are recorded after the data prefixed by this header, as well as in the central directory. + + + + + Signature for central header + + + + + Signature for central header + + + + + Signature for Zip64 central file header + + + + + Signature for Zip64 central file header + + + + + Signature for Zip64 central directory locator + + + + + Signature for archive extra data signature (were headers are encrypted). + + + + + Central header digitial signature + + + + + Central header digitial signature + + + + + End of central directory record signature + + + + + End of central directory record signature + + + + + Default encoding used for string conversion. 0 gives the default system OEM code page. + Using the default code page isnt the full solution neccessarily + there are many variable factors, codepage 850 is often a good choice for + European users, however be careful about compatability. + + + + Depracated wrapper for + + + Depracated wrapper for + + + Depracated wrapper for + + + Depracated wrapper for + + + Depracated wrapper for + + + Depracated wrapper for + + + + Defines known values for the property. + + + + + Host system = MSDOS + + + + + Host system = Amiga + + + + + Host system = Open VMS + + + + + Host system = Unix + + + + + Host system = VMCms + + + + + Host system = Atari ST + + + + + Host system = OS2 + + + + + Host system = Macintosh + + + + + Host system = ZSystem + + + + + Host system = Cpm + + + + + Host system = Windows NT + + + + + Host system = MVS + + + + + Host system = VSE + + + + + Host system = Acorn RISC + + + + + Host system = VFAT + + + + + Host system = Alternate MVS + + + + + Host system = BEOS + + + + + Host system = Tandem + + + + + Host system = OS400 + + + + + Host system = OSX + + + + + Host system = WinZIP AES + + + + + This class represents an entry in a zip archive. This can be a file + or a directory + ZipFile and ZipInputStream will give you instances of this class as + information about the members in an archive. ZipOutputStream + uses an instance of this class when creating an entry in a Zip file. +
+
Author of the original java version : Jochen Hoenicke +
+
+ + + Creates a zip entry with the given name. + + + The name for this entry. Can include directory components. + The convention for names is 'unix' style paths with relative names only. + There are with no device names and path elements are separated by '/' characters. + + + The name passed is null + + + + + Creates a zip entry with the given name and version required to extract + + + The name for this entry. Can include directory components. + The convention for names is 'unix' style paths with no device names and + path elements separated by '/' characters. This is not enforced see CleanName + on how to ensure names are valid if this is desired. + + + The minimum 'feature version' required this entry + + + The name passed is null + + + + + Initializes an entry with the given name and made by information + + Name for this entry + Version and HostSystem Information + Minimum required zip feature version required to extract this entry + Compression method for this entry. + + The name passed is null + + + versionRequiredToExtract should be 0 (auto-calculate) or > 10 + + + This constructor is used by the ZipFile class when reading from the central header + It is not generally useful, use the constructor specifying the name only. + + + + + Creates a deep copy of the given zip entry. + + + The entry to copy. + + + + + Get a value indicating wether the entry has a CRC value available. + + + + + Get/Set flag indicating if entry is encrypted. + A simple helper routine to aid interpretation of flags + + This is an assistant that interprets the flags property. + + +
+ Get / set a flag indicating wether entry name and comment text are + encoded in unicode UTF8. + + This is an assistant that interprets the flags property. + + + + Value used during password checking for PKZIP 2.0 / 'classic' encryption. + + + + + Get/Set general purpose bit flag for entry + + + General purpose bit flag
+
+ Bit 0: If set, indicates the file is encrypted
+ Bit 1-2 Only used for compression type 6 Imploding, and 8, 9 deflating
+ Imploding:
+ Bit 1 if set indicates an 8K sliding dictionary was used. If clear a 4k dictionary was used
+ Bit 2 if set indicates 3 Shannon-Fanno trees were used to encode the sliding dictionary, 2 otherwise
+
+ Deflating:
+ Bit 2 Bit 1
+ 0 0 Normal compression was used
+ 0 1 Maximum compression was used
+ 1 0 Fast compression was used
+ 1 1 Super fast compression was used
+
+ Bit 3: If set, the fields crc-32, compressed size + and uncompressed size are were not able to be written during zip file creation + The correct values are held in a data descriptor immediately following the compressed data.
+ Bit 4: Reserved for use by PKZIP for enhanced deflating
+ Bit 5: If set indicates the file contains compressed patch data
+ Bit 6: If set indicates strong encryption was used.
+ Bit 7-10: Unused or reserved
+ Bit 11: If set the name and comments for this entry are in unicode.
+ Bit 12-15: Unused or reserved
+
+ + +
+ + + Get/Set index of this entry in Zip file + + This is only valid when the entry is part of a + + + + Get/set offset for use in central header + + + + + Get/Set external file attributes as an integer. + The values of this are operating system dependant see + HostSystem for details + + + + + Get the version made by for this entry or zero if unknown. + The value / 10 indicates the major version number, and + the value mod 10 is the minor version number + + + + + Get a value indicating this entry is for a DOS/Windows system. + + + + + Test the external attributes for this to + see if the external attributes are Dos based (including WINNT and variants) + and match the values + + The attributes to test. + Returns true if the external attributes are known to be DOS/Windows + based and have the same attributes set as the value passed. + + + + Gets the compatability information for the external file attribute + If the external file attributes are compatible with MS-DOS and can be read + by PKZIP for DOS version 2.04g then this value will be zero. Otherwise the value + will be non-zero and identify the host system on which the attributes are compatible. + + + + The values for this as defined in the Zip File format and by others are shown below. The values are somewhat + misleading in some cases as they are not all used as shown. You should consult the relevant documentation + to obtain up to date and correct information. The modified appnote by the infozip group is + particularly helpful as it documents a lot of peculiarities. The document is however a little dated. + + 0 - MS-DOS and OS/2 (FAT / VFAT / FAT32 file systems) + 1 - Amiga + 2 - OpenVMS + 3 - Unix + 4 - VM/CMS + 5 - Atari ST + 6 - OS/2 HPFS + 7 - Macintosh + 8 - Z-System + 9 - CP/M + 10 - Windows NTFS + 11 - MVS (OS/390 - Z/OS) + 12 - VSE + 13 - Acorn Risc + 14 - VFAT + 15 - Alternate MVS + 16 - BeOS + 17 - Tandem + 18 - OS/400 + 19 - OS/X (Darwin) + 99 - WinZip AES + remainder - unused + + + + + + Get minimum Zip feature version required to extract this entry + + + Minimum features are defined as:
+ 1.0 - Default value
+ 1.1 - File is a volume label
+ 2.0 - File is a folder/directory
+ 2.0 - File is compressed using Deflate compression
+ 2.0 - File is encrypted using traditional encryption
+ 2.1 - File is compressed using Deflate64
+ 2.5 - File is compressed using PKWARE DCL Implode
+ 2.7 - File is a patch data set
+ 4.5 - File uses Zip64 format extensions
+ 4.6 - File is compressed using BZIP2 compression
+ 5.0 - File is encrypted using DES
+ 5.0 - File is encrypted using 3DES
+ 5.0 - File is encrypted using original RC2 encryption
+ 5.0 - File is encrypted using RC4 encryption
+ 5.1 - File is encrypted using AES encryption
+ 5.1 - File is encrypted using corrected RC2 encryption
+ 5.1 - File is encrypted using corrected RC2-64 encryption
+ 6.1 - File is encrypted using non-OAEP key wrapping
+ 6.2 - Central directory encryption (not confirmed yet)
+ 6.3 - File is compressed using LZMA
+ 6.3 - File is compressed using PPMD+
+ 6.3 - File is encrypted using Blowfish
+ 6.3 - File is encrypted using Twofish
+
+ +
+ + + Get a value indicating whether this entry can be decompressed by the library. + + This is based on the and + wether the compression method is supported. + + + + Force this entry to be recorded using Zip64 extensions. + + + + + Get a value indicating wether Zip64 extensions were forced. + + A value of true if Zip64 extensions have been forced on; false if not. + + + + Gets a value indicating if the entry requires Zip64 extensions + to store the full entry values. + + A value of true if a local header requires Zip64 extensions; false if not. + + + + Get a value indicating wether the central directory entry requires Zip64 extensions to be stored. + + + + + Get/Set DosTime value. + + + The MS-DOS date format can only represent dates between 1/1/1980 and 12/31/2107. + + + + + Gets/Sets the time of last modification of the entry. + + + The property is updated to match this as far as possible. + + + + + Returns the entry name. + + + The unix naming convention is followed. + Path components in the entry should always separated by forward slashes ('/'). + Dos device names like C: should also be removed. + See the class, or + + + + + Gets/Sets the size of the uncompressed data. + + + The size or -1 if unknown. + + Setting the size before adding an entry to an archive can help + avoid compatability problems with some archivers which dont understand Zip64 extensions. + + + + Gets/Sets the size of the compressed data. + + + The compressed entry size or -1 if unknown. + + + + + Gets/Sets the crc of the uncompressed data. + + + Crc is not in the range 0..0xffffffffL + + + The crc value or -1 if unknown. + + + + + Gets/Sets the compression method. Only Deflated and Stored are supported. + + + The compression method for this entry + + + + + + + Gets the compression method for outputting to the local or central header. + Returns same value as CompressionMethod except when AES encrypting, which + places 99 in the method and places the real method in the extra data. + + + + + Gets/Sets the extra data. + + + Extra data is longer than 64KB (0xffff) bytes. + + + Extra data or null if not set. + + + + + For AES encrypted files returns or sets the number of bits of encryption (128, 192 or 256). + When setting, only 0 (off), 128 or 256 is supported. + + + + + AES Encryption strength for storage in extra data in entry header. + 1 is 128 bit, 2 is 192 bit, 3 is 256 bit. + + + + + Returns the length of the salt, in bytes + + + + + Number of extra bytes required to hold the AES Header fields (Salt, Pwd verify, AuthCode) + + + + + Process extra data fields updating the entry based on the contents. + + True if the extra data fields should be handled + for a local header, rather than for a central header. + + + + + Gets/Sets the entry comment. + + + If comment is longer than 0xffff. + + + The comment or null if not set. + + + A comment is only available for entries when read via the class. + The class doesnt have the comment data available. + + + + + Gets a value indicating if the entry is a directory. + however. + + + A directory is determined by an entry name with a trailing slash '/'. + The external file attributes can also indicate an entry is for a directory. + Currently only dos/windows attributes are tested in this manner. + The trailing slash convention should always be followed. + + + + + Get a value of true if the entry appears to be a file; false otherwise + + + This only takes account of DOS/Windows attributes. Other operating systems are ignored. + For linux and others the result may be incorrect. + + + + + Test entry to see if data can be extracted. + + Returns true if data can be extracted for this entry; false otherwise. + + + + Creates a copy of this zip entry. + + An that is a copy of the current instance. + + + + Gets a string representation of this ZipEntry. + + A readable textual representation of this + + + + Test a compression method to see if this library + supports extracting data compressed with that method + + The compression method to test. + Returns true if the compression method is supported; false otherwise + + + + Cleans a name making it conform to Zip file conventions. + Devices names ('c:\') and UNC share names ('\\server\share') are removed + and forward slashes ('\') are converted to back slashes ('/'). + Names are made relative by trimming leading slashes which is compatible + with the ZIP naming convention. + + The name to clean + The 'cleaned' name. + + The Zip name transform class is more flexible. + + + + + Basic implementation of + + + + + Defines the possible values to be used for the . + + + + + Use the recorded LastWriteTime value for the file. + + + + + Use the recorded LastWriteTimeUtc value for the file + + + + + Use the recorded CreateTime value for the file. + + + + + Use the recorded CreateTimeUtc value for the file. + + + + + Use the recorded LastAccessTime value for the file. + + + + + Use the recorded LastAccessTimeUtc value for the file. + + + + + Use a fixed value. + + The actual value used can be + specified via the constructor or + using the with the setting set + to which will use the when this class was constructed. + The property can also be used to set this value. + + + + Initialise a new instance of the class. + + A default , and the LastWriteTime for files is used. + + + + Initialise a new instance of using the specified + + The time setting to use when creating Zip entries. + + + + Initialise a new instance of using the specified + + The time to set all values to. + + + + Get / set the to be used when creating new values. + + + Setting this property to null will cause a default name transform to be used. + + + + + Get / set the in use. + + + + + Get / set the value to use when is set to + + + + + A bitmask defining the attributes to be retrieved from the actual file. + + The default is to get all possible attributes from the actual file. + + + + A bitmask defining which attributes are to be set on. + + By default no attributes are set on. + + + + Get set a value indicating wether unidoce text should be set on. + + + + + Make a new for a file. + + The name of the file to create a new entry for. + Returns a new based on the . + + + + Make a new for a file. + + The name of the file to create a new entry for. + If true entry detail is retrieved from the file system if the file exists. + Returns a new based on the . + + + + Make a new from a name. + + The name of the file to create a new entry for. + An alternative name to be used for the new entry. Null if not applicable. + If true entry detail is retrieved from the file system if the file exists. + Returns a new based on the . + + + + Make a new for a directory. + + The raw untransformed name for the new directory + Returns a new representing a directory. + + + + Make a new for a directory. + + The raw untransformed name for the new directory + If true entry detail is retrieved from the file system if the file exists. + Returns a new representing a directory. + + + + ZipException represents exceptions specific to Zip classes and code. + + + + + Initialise a new instance of . + + + + + Initialise a new instance of with its message string. + + A that describes the error. + + + + Initialise a new instance of . + + A that describes the error. + The that caused this exception. + + + + Initializes a new instance of the ZipException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + ExtraData tagged value interface. + + + + + Get the ID for this tagged data value. + + + + + Set the contents of this instance from the data passed. + + The data to extract contents from. + The offset to begin extracting data from. + The number of bytes to extract. + + + + Get the data representing this instance. + + Returns the data for this instance. + + + + A raw binary tagged value + + + + + Initialise a new instance. + + The tag ID. + + + + Get the ID for this tagged data value. + + + + + Set the data from the raw values provided. + + The raw data to extract values from. + The index to start extracting values from. + The number of bytes available. + + + + Get the binary data representing this instance. + + The raw binary data representing this instance. + + + + Get /set the binary data representing this instance. + + The raw binary data representing this instance. + + + + The tag ID for this instance. + + + + + Class representing extended unix date time values. + + + + + Flags indicate which values are included in this instance. + + + + + The modification time is included + + + + + The access time is included + + + + + The create time is included. + + + + + Get the ID + + + + + Set the data from the raw values provided. + + The raw data to extract values from. + The index to start extracting values from. + The number of bytes available. + + + + Get the binary data representing this instance. + + The raw binary data representing this instance. + + + + Test a value to see if is valid and can be represented here. + + The value to test. + Returns true if the value is valid and can be represented; false if not. + The standard Unix time is a signed integer data type, directly encoding the Unix time number, + which is the number of seconds since 1970-01-01. + Being 32 bits means the values here cover a range of about 136 years. + The minimum representable time is 1901-12-13 20:45:52, + and the maximum representable time is 2038-01-19 03:14:07. + + + + + Get /set the Modification Time + + + + + + + Get / set the Access Time + + + + + + + Get / Set the Create Time + + + + + + + Get/set the values to include. + + + + + Class handling NT date time values. + + + + + Get the ID for this tagged data value. + + + + + Set the data from the raw values provided. + + The raw data to extract values from. + The index to start extracting values from. + The number of bytes available. + + + + Get the binary data representing this instance. + + The raw binary data representing this instance. + + + + Test a valuie to see if is valid and can be represented here. + + The value to test. + Returns true if the value is valid and can be represented; false if not. + + NTFS filetimes are 64-bit unsigned integers, stored in Intel + (least significant byte first) byte order. They determine the + number of 1.0E-07 seconds (1/10th microseconds!) past WinNT "epoch", + which is "01-Jan-1601 00:00:00 UTC". 28 May 60056 is the upper limit + + + + + Get/set the last modification time. + + + + + Get /set the create time + + + + + Get /set the last access time. + + + + + A factory that creates tagged data instances. + + + + + Get data for a specific tag value. + + The tag ID to find. + The data to search. + The offset to begin extracting data from. + The number of bytes to extract. + The located value found, or null if not found. + + + + + A class to handle the extra data field for Zip entries + + + Extra data contains 0 or more values each prefixed by a header tag and length. + They contain zero or more bytes of actual data. + The data is held internally using a copy on write strategy. This is more efficient but + means that for extra data created by passing in data can have the values modified by the caller + in some circumstances. + + + + + Initialise a default instance. + + + + + Initialise with known extra data. + + The extra data. + + + + Get the raw extra data value + + Returns the raw byte[] extra data this instance represents. + + + + Clear the stored data. + + + + + Gets the current extra data length. + + + + + Get a read-only for the associated tag. + + The tag to locate data for. + Returns a containing tag data or null if no tag was found. + + + + Get the tagged data for a tag. + + The tag to search for. + Returns a tagged value or null if none found. + + + + Get the length of the last value found by + + This is only valid if has previously returned true. + + + + Get the index for the current read value. + + This is only valid if has previously returned true. + Initially the result will be the index of the first byte of actual data. The value is updated after calls to + , and . + + + + Get the number of bytes remaining to be read for the current value; + + + + + Find an extra data value + + The identifier for the value to find. + Returns true if the value was found; false otherwise. + + + + Add a new entry to extra data. + + The value to add. + + + + Add a new entry to extra data + + The ID for this entry. + The data to add. + If the ID already exists its contents are replaced. + + + + Start adding a new entry. + + Add data using , , , or . + The new entry is completed and actually added by calling + + + + + Add entry data added since using the ID passed. + + The identifier to use for this entry. + + + + Add a byte of data to the pending new entry. + + The byte to add. + + + + + Add data to a pending new entry. + + The data to add. + + + + + Add a short value in little endian order to the pending new entry. + + The data to add. + + + + + Add an integer value in little endian order to the pending new entry. + + The data to add. + + + + + Add a long value in little endian order to the pending new entry. + + The data to add. + + + + + Delete an extra data field. + + The identifier of the field to delete. + Returns true if the field was found and deleted. + + + + Read a long in little endian form from the last found data value + + Returns the long value read. + + + + Read an integer in little endian form from the last found data value. + + Returns the integer read. + + + + Read a short value in little endian form from the last found data value. + + Returns the short value read. + + + + Read a byte from an extra data + + The byte value read or -1 if the end of data has been reached. + + + + Skip data during reading. + + The number of bytes to skip. + + + + Internal form of that reads data at any location. + + Returns the short value read. + + + + Dispose of this instance. + + + + + Arguments used with KeysRequiredEvent + + + + + Initialise a new instance of + + The name of the file for which keys are required. + + + + Initialise a new instance of + + The name of the file for which keys are required. + The current key value. + + + + Gets the name of the file for which keys are required. + + + + + Gets or sets the key value + + + + + The strategy to apply to testing. + + + + + Find the first error only. + + + + + Find all possible errors. + + + + + The operation in progress reported by a during testing. + + TestArchive + + + + Setting up testing. + + + + + Testing an individual entries header + + + + + Testing an individual entries data + + + + + Testing an individual entry has completed. + + + + + Running miscellaneous tests + + + + + Testing is complete + + + + + Status returned returned by during testing. + + TestArchive + + + + Initialise a new instance of + + The this status applies to. + + + + Get the current in progress. + + + + + Get the this status is applicable to. + + + + + Get the current/last entry tested. + + + + + Get the number of errors detected so far. + + + + + Get the number of bytes tested so far for the current entry. + + + + + Get a value indicating wether the last entry test was valid. + + + + + Delegate invoked during testing if supplied indicating current progress and status. + + If the message is non-null an error has occured. If the message is null + the operation as found in status has started. + + + + The possible ways of applying updates to an archive. + + + + + Perform all updates on temporary files ensuring that the original file is saved. + + + + + Update the archive directly, which is faster but less safe. + + + + + This class represents a Zip archive. You can ask for the contained + entries, or get an input stream for a file entry. The entry is + automatically decompressed. + + You can also update the archive adding or deleting entries. + + This class is thread safe for input: You can open input streams for arbitrary + entries in different threads. +
+
Author of the original java version : Jochen Hoenicke +
+ + + using System; + using System.Text; + using System.Collections; + using System.IO; + + using ICSharpCode.SharpZipLib.Zip; + + class MainClass + { + static public void Main(string[] args) + { + using (ZipFile zFile = new ZipFile(args[0])) { + Console.WriteLine("Listing of : " + zFile.Name); + Console.WriteLine(""); + Console.WriteLine("Raw Size Size Date Time Name"); + Console.WriteLine("-------- -------- -------- ------ ---------"); + foreach (ZipEntry e in zFile) { + if ( e.IsFile ) { + DateTime d = e.DateTime; + Console.WriteLine("{0, -10}{1, -10}{2} {3} {4}", e.Size, e.CompressedSize, + d.ToString("dd-MM-yy"), d.ToString("HH:mm"), + e.Name); + } + } + } + } + } + + +
+ + + Delegate for handling keys/password setting during compresion/decompression. + + + + + Event handler for handling encryption keys. + + + + + Handles getting of encryption keys when required. + + The file for which encryption keys are required. + + + + Get/set the encryption key value. + + + + + Password to be used for encrypting/decrypting files. + + Set to null if no password is required. + + + + Get a value indicating wether encryption keys are currently available. + + + + + Opens a Zip file with the given name for reading. + + The name of the file to open. + The argument supplied is null. + + An i/o error occurs + + + The file doesn't contain a valid zip archive. + + + + + Opens a Zip file reading the given . + + The to read archive data from. + The supplied argument is null. + + An i/o error occurs. + + + The file doesn't contain a valid zip archive. + + + + + Opens a Zip file reading the given . + + The to read archive data from. + true to leave the file open when the ZipFile is disposed, false to dispose of it + The supplied argument is null. + + An i/o error occurs. + + + The file doesn't contain a valid zip archive. + + + + + Opens a Zip file reading the given . + + The to read archive data from. + + An i/o error occurs + + + The stream doesn't contain a valid zip archive.
+
+ + The stream doesnt support seeking. + + + The stream argument is null. + +
+ + + Opens a Zip file reading the given . + + The to read archive data from. + true to leave the stream open when the ZipFile is disposed, false to dispose of it + + An i/o error occurs + + + The stream doesn't contain a valid zip archive.
+
+ + The stream doesnt support seeking. + + + The stream argument is null. + +
+ + + Initialises a default instance with no entries and no file storage. + + + + + Finalize this instance. + + + + + Closes the ZipFile. If the stream is owned then this also closes the underlying input stream. + Once closed, no further instance methods should be called. + + + An i/o error occurs. + + + + + Create a new whose data will be stored in a file. + + The name of the archive to create. + Returns the newly created + is null + + + + Create a new whose data will be stored on a stream. + + The stream providing data storage. + Returns the newly created + is null + doesnt support writing. + + + + Get/set a flag indicating if the underlying stream is owned by the ZipFile instance. + If the flag is true then the stream will be closed when Close is called. + + + The default value is true in all cases. + + + + + Get a value indicating wether + this archive is embedded in another file or not. + + + + + Get a value indicating that this archive is a new one. + + + + + Gets the comment for the zip file. + + + + + Gets the name of this zip file. + + + + + Gets the number of entries in this zip file. + + + The Zip file has been closed. + + + + + Get the number of entries contained in this . + + + + + Indexer property for ZipEntries + + + + + Gets an enumerator for the Zip entries in this Zip file. + + Returns an for this archive. + + The Zip file has been closed. + + + + + Return the index of the entry with a matching name + + Entry name to find + If true the comparison is case insensitive + The index position of the matching entry or -1 if not found + + The Zip file has been closed. + + + + + Searches for a zip entry in this archive with the given name. + String comparisons are case insensitive + + + The name to find. May contain directory components separated by slashes ('/'). + + + A clone of the zip entry, or null if no entry with that name exists. + + + The Zip file has been closed. + + + + + Gets an input stream for reading the given zip entry data in an uncompressed form. + Normally the should be an entry returned by GetEntry(). + + The to obtain a data for + An input containing data for this + + The ZipFile has already been closed + + + The compression method for the entry is unknown + + + The entry is not found in the ZipFile + + + + + Creates an input stream reading a zip entry + + The index of the entry to obtain an input stream for. + + An input containing data for this + + + The ZipFile has already been closed + + + The compression method for the entry is unknown + + + The entry is not found in the ZipFile + + + + + Test an archive for integrity/validity + + Perform low level data Crc check + true if all tests pass, false otherwise + Testing will terminate on the first error found. + + + + Test an archive for integrity/validity + + Perform low level data Crc check + The to apply. + The handler to call during testing. + true if all tests pass, false otherwise + The object has already been closed. + + + + Test a local header against that provided from the central directory + + + The entry to test against + + The type of tests to carry out. + The offset of the entries data in the file + + + + The kind of update to apply. + + + + + Get / set the to apply to names when updating. + + + + + Get/set the used to generate values + during updates. + + + + + Get /set the buffer size to be used when updating this zip file. + + + + + Get a value indicating an update has been started. + + + + + Get / set a value indicating how Zip64 Extension usage is determined when adding entries. + + + + + Begin updating this archive. + + The archive storage for use during the update. + The data source to utilise during updating. + ZipFile has been closed. + One of the arguments provided is null + ZipFile has been closed. + + + + Begin updating to this archive. + + The storage to use during the update. + + + + Begin updating this archive. + + + + + + + + Commit current updates, updating this archive. + + + + ZipFile has been closed. + + + + Abort updating leaving the archive unchanged. + + + + + + + Set the file comment to be recorded when the current update is commited. + + The comment to record. + ZipFile has been closed. + + + + Add a new entry to the archive. + + The name of the file to add. + The compression method to use. + Ensure Unicode text is used for name and comment for this entry. + Argument supplied is null. + ZipFile has been closed. + Compression method is not supported. + + + + Add a new entry to the archive. + + The name of the file to add. + The compression method to use. + ZipFile has been closed. + The compression method is not supported. + + + + Add a file to the archive. + + The name of the file to add. + Argument supplied is null. + + + + Add a file to the archive. + + The name of the file to add. + The name to use for the on the Zip file created. + Argument supplied is null. + + + + Add a file entry with data. + + The source of the data for this entry. + The name to give to the entry. + + + + Add a file entry with data. + + The source of the data for this entry. + The name to give to the entry. + The compression method to use. + + + + Add a file entry with data. + + The source of the data for this entry. + The name to give to the entry. + The compression method to use. + Ensure Unicode text is used for name and comments for this entry. + + + + Add a that contains no data. + + The entry to add. + This can be used to add directories, volume labels, or empty file entries. + + + + Add a with data. + + The source of the data for this entry. + The entry to add. + This can be used to add file entries with a custom data source. + + + + Add a directory entry to the archive. + + The directory to add. + + + + Delete an entry by name + + The filename to delete + True if the entry was found and deleted; false otherwise. + + + + Delete a from the archive. + + The entry to delete. + + + + Write an unsigned short in little endian byte order. + + + + + Write an int in little endian byte order. + + + + + Write an unsigned int in little endian byte order. + + + + + Write a long in little endian byte order. + + + + + Get a raw memory buffer. + + Returns a raw memory buffer. + + + + Get the size of the source descriptor for a . + + The update to get the size for. + The descriptor size, zero if there isnt one. + + + + Get an output stream for the specified + + The entry to get an output stream for. + The output stream obtained for the entry. + + + + Class used to sort updates. + + + + + Compares two objects and returns a value indicating whether one is + less than, equal to or greater than the other. + + First object to compare + Second object to compare. + Compare result. + + + + Represents a pending update to a Zip file. + + + + + Copy an existing entry. + + The existing entry to copy. + + + + Get the for this update. + + This is the source or original entry. + + + + Get the that will be written to the updated/new file. + + + + + Get the command for this update. + + + + + Get the filename if any for this update. Null if none exists. + + + + + Get/set the location of the size patch for this update. + + + + + Get /set the location of the crc patch for this update. + + + + + Get/set the size calculated by offset. + Specifically, the difference between this and next entry's starting offset. + + + + + Releases the unmanaged resources used by the this instance and optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only unmanaged resources. + + + + Read an unsigned short in little endian byte order. + + Returns the value read. + + The stream ends prematurely + + + + + Read a uint in little endian byte order. + + Returns the value read. + + An i/o error occurs. + + + The file ends prematurely + + + + + Search for and read the central directory of a zip file filling the entries array. + + + An i/o error occurs. + + + The central directory is malformed or cannot be found + + + + + Locate the data for a given entry. + + + The start offset of the data. + + + The stream ends prematurely + + + The local header signature is invalid, the entry and central header file name lengths are different + or the local and entry compression methods dont match + + + + + Represents a string from a which is stored as an array of bytes. + + + + + Initialise a with a string. + + The textual string form. + + + + Initialise a using a string in its binary 'raw' form. + + + + + + Get a value indicating the original source of data for this instance. + True if the source was a string; false if the source was binary data. + + + + + Get the length of the comment when represented as raw bytes. + + + + + Get the comment in its 'raw' form as plain bytes. + + + + + Reset the comment to its initial state. + + + + + Implicit conversion of comment to a string. + + The to convert to a string. + The textual equivalent for the input value. + + + + An enumerator for Zip entries + + + + + An is a stream that you can write uncompressed data + to and flush, but cannot read, seek or do anything else to. + + + + + Gets a value indicating whether the current stream supports reading. + + + + + Write any buffered data to underlying storage. + + + + + Gets a value indicating whether the current stream supports writing. + + + + + Gets a value indicating whether the current stream supports seeking. + + + + + Get the length in bytes of the stream. + + + + + Gets or sets the position within the current stream. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + An array of bytes. When this method returns, the buffer contains the specified byte array with the values between offset and (offset + count - 1) replaced by the bytes read from the current source. + The zero-based byte offset in buffer at which to begin storing the data read from the current stream. + The maximum number of bytes to be read from the current stream. + + The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not currently available, or zero (0) if the end of the stream has been reached. + + The sum of offset and count is larger than the buffer length. + Methods were called after the stream was closed. + The stream does not support reading. + buffer is null. + An I/O error occurs. + offset or count is negative. + + + + Sets the position within the current stream. + + A byte offset relative to the origin parameter. + A value of type indicating the reference point used to obtain the new position. + + The new position within the current stream. + + An I/O error occurs. + The stream does not support seeking, such as if the stream is constructed from a pipe or console output. + Methods were called after the stream was closed. + + + + Sets the length of the current stream. + + The desired length of the current stream in bytes. + The stream does not support both writing and seeking, such as if the stream is constructed from a pipe or console output. + An I/O error occurs. + Methods were called after the stream was closed. + + + + Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + An array of bytes. This method copies count bytes from buffer to the current stream. + The zero-based byte offset in buffer at which to begin copying bytes to the current stream. + The number of bytes to be written to the current stream. + An I/O error occurs. + The stream does not support writing. + Methods were called after the stream was closed. + buffer is null. + The sum of offset and count is greater than the buffer length. + offset or count is negative. + + + + A is an + whose data is only a part or subsection of a file. + + + + + Initialise a new instance of the class. + + The containing the underlying stream to use for IO. + The start of the partial data. + The length of the partial data. + + + + Read a byte from this stream. + + Returns the byte read or -1 on end of stream. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + An array of bytes. When this method returns, the buffer contains the specified byte array with the values between offset and (offset + count - 1) replaced by the bytes read from the current source. + The zero-based byte offset in buffer at which to begin storing the data read from the current stream. + The maximum number of bytes to be read from the current stream. + + The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not currently available, or zero (0) if the end of the stream has been reached. + + The sum of offset and count is larger than the buffer length. + Methods were called after the stream was closed. + The stream does not support reading. + buffer is null. + An I/O error occurs. + offset or count is negative. + + + + Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + An array of bytes. This method copies count bytes from buffer to the current stream. + The zero-based byte offset in buffer at which to begin copying bytes to the current stream. + The number of bytes to be written to the current stream. + An I/O error occurs. + The stream does not support writing. + Methods were called after the stream was closed. + buffer is null. + The sum of offset and count is greater than the buffer length. + offset or count is negative. + + + + When overridden in a derived class, sets the length of the current stream. + + The desired length of the current stream in bytes. + The stream does not support both writing and seeking, such as if the stream is constructed from a pipe or console output. + An I/O error occurs. + Methods were called after the stream was closed. + + + + When overridden in a derived class, sets the position within the current stream. + + A byte offset relative to the origin parameter. + A value of type indicating the reference point used to obtain the new position. + + The new position within the current stream. + + An I/O error occurs. + The stream does not support seeking, such as if the stream is constructed from a pipe or console output. + Methods were called after the stream was closed. + + + + Clears all buffers for this stream and causes any buffered data to be written to the underlying device. + + An I/O error occurs. + + + + Gets or sets the position within the current stream. + + + The current position within the stream. + An I/O error occurs. + The stream does not support seeking. + Methods were called after the stream was closed. + + + + Gets the length in bytes of the stream. + + + A long value representing the length of the stream in bytes. + A class derived from Stream does not support seeking. + Methods were called after the stream was closed. + + + + Gets a value indicating whether the current stream supports writing. + + false + true if the stream supports writing; otherwise, false. + + + + Gets a value indicating whether the current stream supports seeking. + + true + true if the stream supports seeking; otherwise, false. + + + + Gets a value indicating whether the current stream supports reading. + + true. + true if the stream supports reading; otherwise, false. + + + + Gets a value that determines whether the current stream can time out. + + + A value that determines whether the current stream can time out. + + + + Provides a static way to obtain a source of data for an entry. + + + + + Get a source of data by creating a new stream. + + Returns a to use for compression input. + Ideally a new stream is created and opened to achieve this, to avoid locking problems. + + + + Represents a source of data that can dynamically provide + multiple data sources based on the parameters passed. + + + + + Get a data source. + + The to get a source for. + The name for data if known. + Returns a to use for compression input. + Ideally a new stream is created and opened to achieve this, to avoid locking problems. + + + + Default implementation of a for use with files stored on disk. + + + + + Initialise a new instnace of + + The name of the file to obtain data from. + + + + Get a providing data. + + Returns a provising data. + + + + Default implementation of for files stored on disk. + + + + + Get a providing data for an entry. + + The entry to provide data for. + The file name for data if known. + Returns a stream providing data; or null if not available + + + + Defines facilities for data storage when updating Zip Archives. + + + + + Get the to apply during updates. + + + + + Get an empty that can be used for temporary output. + + Returns a temporary output + + + + + Convert a temporary output stream to a final stream. + + The resulting final + + + + + Make a temporary copy of the original stream. + + The to copy. + Returns a temporary output that is a copy of the input. + + + + Return a stream suitable for performing direct updates on the original source. + + The current stream. + Returns a stream suitable for direct updating. + This may be the current stream passed. + + + + Dispose of this instance. + + + + + An abstract suitable for extension by inheritance. + + + + + Initializes a new instance of the class. + + The update mode. + + + + Gets a temporary output + + Returns the temporary output stream. + + + + + Converts the temporary to its final form. + + Returns a that can be used to read + the final storage for the archive. + + + + + Make a temporary copy of a . + + The to make a copy of. + Returns a temporary output that is a copy of the input. + + + + Return a stream suitable for performing direct updates on the original source. + + The to open for direct update. + Returns a stream suitable for direct updating. + + + + Disposes this instance. + + + + + Gets the update mode applicable. + + The update mode. + + + + An implementation suitable for hard disks. + + + + + Initializes a new instance of the class. + + The file. + The update mode. + + + + Initializes a new instance of the class. + + The file. + + + + Gets a temporary output for performing updates on. + + Returns the temporary output stream. + + + + Converts a temporary to its final form. + + Returns a that can be used to read + the final storage for the archive. + + + + Make a temporary copy of a stream. + + The to copy. + Returns a temporary output that is a copy of the input. + + + + Return a stream suitable for performing direct updates on the original source. + + The current stream. + Returns a stream suitable for direct updating. + If the is not null this is used as is. + + + + Disposes this instance. + + + + + An implementation suitable for in memory streams. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The to use + This constructor is for testing as memory streams dont really require safe mode. + + + + Get the stream returned by if this was in fact called. + + + + + Gets the temporary output + + Returns the temporary output stream. + + + + Converts the temporary to its final form. + + Returns a that can be used to read + the final storage for the archive. + + + + Make a temporary copy of the original stream. + + The to copy. + Returns a temporary output that is a copy of the input. + + + + Return a stream suitable for performing direct updates on the original source. + + The original source stream + Returns a stream suitable for direct updating. + If the passed is not null this is used; + otherwise a new is returned. + + + + Disposes this instance. + + + + + Holds data pertinent to a data descriptor. + + + + + Get /set the compressed size of data. + + + + + Get / set the uncompressed size of data + + + + + Get /set the crc value. + + + + + This class assists with writing/reading from Zip files. + + + + + Initialise an instance of this class. + + The name of the file to open. + + + + Initialise a new instance of . + + The stream to use. + + + + Get / set a value indicating wether the the underlying stream is owned or not. + + If the stream is owned it is closed when this instance is closed. + + + + Close the stream. + + + The underlying stream is closed only if is true. + + + + + Locates a block with the desired . + + The signature to find. + Location, marking the end of block. + Minimum size of the block. + The maximum variable data. + Eeturns the offset of the first byte after the signature; -1 if not found + + + + Write Zip64 end of central directory records (File header and locator). + + The number of entries in the central directory. + The size of entries in the central directory. + The offset of the dentral directory. + + + + Write the required records to end the central directory. + + The number of entries in the directory. + The size of the entries in the directory. + The start of the central directory. + The archive comment. (This can be null). + + + + Read an unsigned short in little endian byte order. + + Returns the value read. + + An i/o error occurs. + + + The file ends prematurely + + + + + Read an int in little endian byte order. + + Returns the value read. + + An i/o error occurs. + + + The file ends prematurely + + + + + Read a long in little endian byte order. + + The value read. + + + + Write an unsigned short in little endian byte order. + + The value to write. + + + + Write a ushort in little endian byte order. + + The value to write. + + + + Write an int in little endian byte order. + + The value to write. + + + + Write a uint in little endian byte order. + + The value to write. + + + + Write a long in little endian byte order. + + The value to write. + + + + Write a ulong in little endian byte order. + + The value to write. + + + + Write a data descriptor. + + The entry to write a descriptor for. + Returns the number of descriptor bytes written. + + + + Read data descriptor at the end of compressed data. + + if set to true [zip64]. + The data to fill in. + Returns the number of bytes read in the descriptor. + + + + This is an InflaterInputStream that reads the files baseInputStream an zip archive + one after another. It has a special method to get the zip entry of + the next file. The zip entry contains information about the file name + size, compressed size, Crc, etc. + It includes support for Stored and Deflated entries. +
+
Author of the original java version : Jochen Hoenicke +
+ + This sample shows how to read a zip file + + using System; + using System.Text; + using System.IO; + + using ICSharpCode.SharpZipLib.Zip; + + class MainClass + { + public static void Main(string[] args) + { + using ( ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]))) { + + ZipEntry theEntry; + const int size = 2048; + byte[] data = new byte[2048]; + + while ((theEntry = s.GetNextEntry()) != null) { + if ( entry.IsFile ) { + Console.Write("Show contents (y/n) ?"); + if (Console.ReadLine() == "y") { + while (true) { + size = s.Read(data, 0, data.Length); + if (size > 0) { + Console.Write(new ASCIIEncoding().GetString(data, 0, size)); + } else { + break; + } + } + } + } + } + } + } + } + + +
+ + + Delegate for reading bytes from a stream. + + + + + The current reader this instance. + + + + + Creates a new Zip input stream, for reading a zip archive. + + The underlying providing data. + + + + Creates a new Zip input stream, for reading a zip archive. + + The underlying providing data. + Size of the buffer. + + + + Optional password used for encryption when non-null + + A password for all encrypted entries in this + + + + Gets a value indicating if there is a current entry and it can be decompressed + + + The entry can only be decompressed if the library supports the zip features required to extract it. + See the ZipEntry Version property for more details. + + + + + Advances to the next entry in the archive + + + The next entry in the archive or null if there are no more entries. + + + If the previous entry is still open CloseEntry is called. + + + Input stream is closed + + + Password is not set, password is invalid, compression method is invalid, + version required to extract is not supported + + + + + Read data descriptor at the end of compressed data. + + + + + Complete cleanup as the final part of closing. + + True if the crc value should be tested + + + + Closes the current zip entry and moves to the next one. + + + The stream is closed + + + The Zip stream ends early + + + + + Returns 1 if there is an entry available + Otherwise returns 0. + + + + + Returns the current size that can be read from the current entry if available + + Thrown if the entry size is not known. + Thrown if no entry is currently available. + + + + Reads a byte from the current zip entry. + + + The byte or -1 if end of stream is reached. + + + + + Handle attempts to read by throwing an . + + The destination array to store data in. + The offset at which data read should be stored. + The maximum number of bytes to read. + Returns the number of bytes actually read. + + + + Handle attempts to read from this entry by throwing an exception + + + + + Perform the initial read on an entry which may include + reading encryption headers and setting up inflation. + + The destination to fill with data read. + The offset to start reading at. + The maximum number of bytes to read. + The actual number of bytes read. + + + + Read a block of bytes from the stream. + + The destination for the bytes. + The index to start storing data. + The number of bytes to attempt to read. + Returns the number of bytes read. + Zero bytes read means end of stream. + + + + Reads a block of bytes from the current zip entry. + + + The number of bytes read (this may be less than the length requested, even before the end of stream), or 0 on end of stream. + + + An i/o error occured. + + + The deflated stream is corrupted. + + + The stream is not open. + + + + + Closes the zip input stream + + + + + ZipNameTransform transforms names as per the Zip file naming convention. + + The use of absolute names is supported although its use is not valid + according to Zip naming conventions, and should not be used if maximum compatability is desired. + + + + Initialize a new instance of + + + + + Initialize a new instance of + + The string to trim from the front of paths if found. + + + + Static constructor. + + + + + Transform a windows directory name according to the Zip file naming conventions. + + The directory name to transform. + The transformed name. + + + + Transform a windows file name according to the Zip file naming conventions. + + The file name to transform. + The transformed name. + + + + Get/set the path prefix to be trimmed from paths if present. + + The prefix is trimmed before any conversion from + a windows path is done. + + + + Force a name to be valid by replacing invalid characters with a fixed value + + The name to force valid + The replacement character to use. + Returns a valid name + + + + Test a name to see if it is a valid name for a zip entry. + + The name to test. + If true checking is relaxed about windows file names and absolute paths. + Returns true if the name is a valid zip name; false otherwise. + Zip path names are actually in Unix format, and should only contain relative paths. + This means that any path stored should not contain a drive or + device letter, or a leading slash. All slashes should forward slashes '/'. + An empty name is valid for a file where the input comes from standard input. + A null name is not considered valid. + + + + + Test a name to see if it is a valid name for a zip entry. + + The name to test. + Returns true if the name is a valid zip name; false otherwise. + Zip path names are actually in unix format, + and should only contain relative paths if a path is present. + This means that the path stored should not contain a drive or + device letter, or a leading slash. All slashes should forward slashes '/'. + An empty name is valid where the input comes from standard input. + A null name is not considered valid. + + + + + This is a DeflaterOutputStream that writes the files into a zip + archive one after another. It has a special method to start a new + zip entry. The zip entries contains information about the file name + size, compressed size, CRC, etc. + + It includes support for Stored and Deflated entries. + This class is not thread safe. +
+
Author of the original java version : Jochen Hoenicke +
+ This sample shows how to create a zip file + + using System; + using System.IO; + + using ICSharpCode.SharpZipLib.Core; + using ICSharpCode.SharpZipLib.Zip; + + class MainClass + { + public static void Main(string[] args) + { + string[] filenames = Directory.GetFiles(args[0]); + byte[] buffer = new byte[4096]; + + using ( ZipOutputStream s = new ZipOutputStream(File.Create(args[1])) ) { + + s.SetLevel(9); // 0 - store only to 9 - means best compression + + foreach (string file in filenames) { + ZipEntry entry = new ZipEntry(file); + s.PutNextEntry(entry); + + using (FileStream fs = File.OpenRead(file)) { + StreamUtils.Copy(fs, s, buffer); + } + } + } + } + } + + +
+ + + Creates a new Zip output stream, writing a zip archive. + + + The output stream to which the archive contents are written. + + + + + Creates a new Zip output stream, writing a zip archive. + + The output stream to which the archive contents are written. + Size of the buffer to use. + + + + Gets a flag value of true if the central header has been added for this archive; false if it has not been added. + + No further entries can be added once this has been done. + + + + Set the zip file comment. + + + The comment text for the entire archive. + + + The converted comment is longer than 0xffff bytes. + + + + + Sets the compression level. The new level will be activated + immediately. + + The new compression level (1 to 9). + + Level specified is not supported. + + + + + + Get the current deflater compression level + + The current compression level + + + + Get / set a value indicating how Zip64 Extension usage is determined when adding entries. + + Older archivers may not understand Zip64 extensions. + If backwards compatability is an issue be careful when adding entries to an archive. + Setting this property to off is workable but less desirable as in those circumstances adding a file + larger then 4GB will fail. + + + + Write an unsigned short in little endian byte order. + + + + + Write an int in little endian byte order. + + + + + Write an int in little endian byte order. + + + + + Starts a new Zip entry. It automatically closes the previous + entry if present. + All entry elements bar name are optional, but must be correct if present. + If the compression method is stored and the output is not patchable + the compression for that entry is automatically changed to deflate level 0 + + + the entry. + + + if entry passed is null. + + + if an I/O error occured. + + + if stream was finished + + + Too many entries in the Zip file
+ Entry name is too long
+ Finish has already been called
+
+
+ + + Closes the current entry, updating header and footer information as required + + + An I/O error occurs. + + + No entry is active. + + + + + Writes the given buffer to the current entry. + + The buffer containing data to write. + The offset of the first byte to write. + The number of bytes to write. + Archive size is invalid + No entry is active. + + + + Finishes the stream. This will write the central directory at the + end of the zip file and flush the stream. + + + This is automatically called when the stream is closed. + + + An I/O error occurs. + + + Comment exceeds the maximum length
+ Entry name exceeds the maximum length +
+
+ + + The entries for the archive. + + + + + Used to track the crc of data added to entries. + + + + + The current entry being added. + + + + + Used to track the size of data for an entry during writing. + + + + + Offset to be recorded for each entry in the central header. + + + + + Comment for the entire archive recorded in central header. + + + + + Flag indicating that header patching is required for the current entry. + + + + + Position to patch crc + + + + + Position to patch size. + + + + + This static class contains functions for encoding and decoding zip file strings + + + + Code page backing field + + The original Zip specification (https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT) states + that file names should only be encoded with IBM Code Page 437 or UTF-8. + In practice, most zip apps use OEM or system encoding (typically cp437 on Windows). + Let's be good citizens and default to UTF-8 http://utf8everywhere.org/ + + + + Automatically select codepage while opening archive + see https://github.com/icsharpcode/SharpZipLib/pull/280#issuecomment-433608324 + + + + + Encoding used for string conversion. Setting this to 65001 (UTF-8) will + also set the Language encoding flag to indicate UTF-8 encoded file names. + + + + + Attempt to get the operating system default codepage, or failing that, to + the fallback code page IBM 437. + + + + + Get wether the default codepage is set to UTF-8. Setting this property to false will + set the to + + + /// Get OEM codepage from NetFX, which parses the NLP file with culture info table etc etc. + But sometimes it yields the special value of 1 which is nicknamed CodePageNoOEM in sources (might also mean CP_OEMCP, but Encoding puts it so). + This was observed on Ukranian and Hindu systems. + Given this value, throws an . + So replace it with , (IBM 437 which is the default code page in a default Windows installation console. + + + + + Convert a portion of a byte array to a string using + + + Data to convert to string + + + Number of bytes to convert starting from index 0 + + + data[0]..data[count - 1] converted to a string + + + + + Convert a byte array to a string using + + + Byte array to convert + + + dataconverted to a string + + + + + Convert a byte array to a string using + + The applicable general purpose bits flags + + Byte array to convert + + The number of bytes to convert. + + dataconverted to a string + + + + + Convert a byte array to a string using + + + Byte array to convert + + The applicable general purpose bits flags + + dataconverted to a string + + + + + Convert a string to a byte array using + + + String to convert to an array + + Converted array + + + + Convert a string to a byte array using + + The applicable general purpose bits flags + + String to convert to an array + + Converted array + + + diff --git a/SqlSugarTest/bin/Debug/Newtonsoft.Json.dll b/SqlSugarTest/bin/Debug/Newtonsoft.Json.dll new file mode 100644 index 0000000..fb95539 --- /dev/null +++ b/SqlSugarTest/bin/Debug/Newtonsoft.Json.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c245f4c85c2ada130bc59942c90b701c24c06edbe3eb25838ed8de4f852535c +size 654848 diff --git a/SqlSugarTest/bin/Debug/Newtonsoft.Json.xml b/SqlSugarTest/bin/Debug/Newtonsoft.Json.xml new file mode 100644 index 0000000..157e1f7 --- /dev/null +++ b/SqlSugarTest/bin/Debug/Newtonsoft.Json.xml @@ -0,0 +1,10752 @@ + + + + Newtonsoft.Json + + + + + Represents a BSON Oid (object id). + + + + + Gets or sets the value of the Oid. + + The value of the Oid. + + + + Initializes a new instance of the class. + + The Oid value. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. + + + + + Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. + + + true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. + + + + + Gets or sets a value indicating whether the root object will be read as a JSON array. + + + true if the root object will be read as a JSON array; otherwise, false. + + + + + Gets or sets the used when reading values from BSON. + + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. + + + + + Gets or sets the used when writing values to BSON. + When set to no conversion will occur. + + The used when writing values to BSON. + + + + Initializes a new instance of the class. + + The to write to. + + + + Initializes a new instance of the class. + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. + + + + + Writes the end. + + The token. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes the beginning of a JSON array. + + + + + Writes the beginning of a JSON object. + + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value that represents a BSON object id. + + The Object ID value to write. + + + + Writes a BSON regex. + + The regex pattern. + The regex options. + + + + Specifies how constructors are used when initializing objects during deserialization by the . + + + + + First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. + + + + + Json.NET will use a non-public default constructor before falling back to a parameterized constructor. + + + + + Converts a binary value to and from a base 64 string value. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Creates a custom object. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Creates an object which will then be populated by the serializer. + + Type of the object. + The created object. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Provides a base class for converting a to and from JSON. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a F# discriminated union type to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an Entity Framework to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). + + + + + Gets or sets the date time styles used when converting a date to and from JSON. + + The date time styles used when converting a date to and from JSON. + + + + Gets or sets the date time format used when converting a date to and from JSON. + + The date time format used when converting a date to and from JSON. + + + + Gets or sets the culture used when converting a date to and from JSON. + + The culture used when converting a date to and from JSON. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from its name string value. + + + + + Gets or sets a value indicating whether the written enum text should be camel case. + + true if the written enum text will be camel case; otherwise, false. + + + + Gets or sets a value indicating whether integer values are allowed when deserializing. + + true if integers are allowed when deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + true if the written enum text will be camel case; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from a string (e.g. "1.2.3.4"). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts XML to and from JSON. + + + + + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. + + The name of the deserialized root element. + + + + Gets or sets a flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + true if the array attribute is written to the XML; otherwise, false. + + + + Gets or sets a value indicating whether to write the root JSON object. + + true if the JSON root object is omitted; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The calling serializer. + The value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Checks if the is a namespace attribute. + + Attribute name to test. + The attribute name prefix if it has one, otherwise an empty string. + true if attribute name is for a namespace attribute, otherwise false. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Floating point numbers are parsed to . + + + + + Floating point numbers are parsed to . + + + + + Specifies how dates are formatted when writing JSON text. + + + + + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + + + + + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + + + + + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + + + + + Date formatted strings are not parsed to a date type and are read as strings. + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Specifies how to treat the time value when converting between string and . + + + + + Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. + + + + + Treat as a UTC. If the object represents a local time, it is converted to a UTC. + + + + + Treat as a local time if a is being converted to a string. + If a string is being converted to , convert to a local time if a time zone is specified. + + + + + Time zone information should be preserved when converting. + + + + + Specifies default value handling options for the . + + + + + + + + + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + so that it is not written to JSON. + This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, + decimals and floating point numbers; and false for booleans). The default value ignored can be changed by + placing the on the property. + + + + + Members with a default value but no JSON will be set to their default value when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + and set members to their default value when deserializing. + + + + + Specifies float format handling options when writing special floating point numbers, e.g. , + and with . + + + + + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + + + + + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + + + + + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. + + + + + Specifies formatting options for the . + + + + + No special formatting is applied. This is the default. + + + + + Causes child objects to be indented according to the and settings. + + + + + Provides an interface for using pooled arrays. + + The array type content. + + + + Rent an array from the pool. This array must be returned when it is no longer needed. + + The minimum required length of the array. The returned array may be longer. + The rented array from the pool. This array must be returned when it is no longer needed. + + + + Return an array to the pool. + + The array that is being returned. + + + + Provides an interface to enable a class to return line and position information. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + The current line number or 0 if no line information is available (for example, when returns false). + + + + Gets the current line position. + + The current line position or 0 if no line information is available (for example, when returns false). + + + + Instructs the how to serialize the collection. + + + + + Gets or sets a value indicating whether null items are allowed in the collection. + + true if null items are allowed in the collection; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a flag indicating whether the array can contain null items. + + A flag indicating whether the array can contain null items. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to use the specified constructor when deserializing that object. + + + + + Instructs the how to serialize the object. + + + + + Gets or sets the id. + + The id. + + + + Gets or sets the title. + + The title. + + + + Gets or sets the description. + + The description. + + + + Gets or sets the collection's items converter. + + The collection's items converter. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets a value that indicates whether to preserve object references. + + + true to keep object reference; otherwise, false. The default is false. + + + + + Gets or sets a value that indicates whether to preserve collection's items references. + + + true to keep collection's items object references; otherwise, false. The default is false. + + + + + Gets or sets the reference loop handling used when serializing the collection's items. + + The reference loop handling. + + + + Gets or sets the type name handling used when serializing the collection's items. + + The type name handling. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Provides methods for converting between .NET types and JSON types. + + + + + + + + Gets or sets a function that creates default . + Default settings are automatically used by serialization methods on , + and and on . + To serialize without using any default settings create a with + . + + + + + Represents JavaScript's boolean value true as a string. This field is read-only. + + + + + Represents JavaScript's boolean value false as a string. This field is read-only. + + + + + Represents JavaScript's null as a string. This field is read-only. + + + + + Represents JavaScript's undefined as a string. This field is read-only. + + + + + Represents JavaScript's positive infinity as a string. This field is read-only. + + + + + Represents JavaScript's negative infinity as a string. This field is read-only. + + + + + Represents JavaScript's NaN as a string. This field is read-only. + + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + The time zone handling when the date is converted to a string. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + The string escape handling. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Serializes the specified object to a JSON string. + + The object to serialize. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting. + + The object to serialize. + Indicates how the output should be formatted. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting and a collection of . + + The object to serialize. + Indicates how the output should be formatted. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Deserializes the JSON to a .NET object. + + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to a .NET object using . + + The JSON to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + The of object being deserialized. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the given anonymous type. + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the given anonymous type using . + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The type of the object to deserialize to. + The JSON to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The type of the object to deserialize to. + The object to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The JSON to deserialize. + The type of the object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The JSON to deserialize. + The type of the object to deserialize to. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + + + Populates the object with values from the JSON string using . + + The JSON to populate values from. + The target object to populate values onto. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + + + + Serializes the to a JSON string. + + The node to serialize. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to serialize. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Serializes the to a JSON string. + + The node to convert to JSON. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to convert to JSON. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Converts an object to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can read JSON. + + true if this can read JSON; otherwise, false. + + + + Gets a value indicating whether this can write JSON. + + true if this can write JSON; otherwise, false. + + + + Instructs the to use the specified when serializing the member or class. + + + + + Gets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + + + + + Initializes a new instance of the class. + + Type of the . + + + + Initializes a new instance of the class. + + Type of the . + Parameter list to use when constructing the . Can be null. + + + + Represents a collection of . + + + + + Instructs the how to serialize the collection. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to deserialize properties with no matching class member into the specified collection + and write values during serialization. + + + + + Gets or sets a value that indicates whether to write extension data when serializing the object. + + + true to write extension data when serializing the object; otherwise, false. The default is true. + + + + + Gets or sets a value that indicates whether to read extension data when deserializing the object. + + + true to read extension data when deserializing the object; otherwise, false. The default is true. + + + + + Initializes a new instance of the class. + + + + + Instructs the not to serialize the public field or public read/write property value. + + + + + Instructs the how to serialize the object. + + + + + Gets or sets the member serialization. + + The member serialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified member serialization. + + The member serialization. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to always serialize the member with the specified name. + + + + + Gets or sets the used when serializing the property's collection items. + + The collection's items . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the null value handling used when serializing this property. + + The null value handling. + + + + Gets or sets the default value handling used when serializing this property. + + The default value handling. + + + + Gets or sets the reference loop handling used when serializing this property. + + The reference loop handling. + + + + Gets or sets the object creation handling used when deserializing this property. + + The object creation handling. + + + + Gets or sets the type name handling used when serializing this property. + + The type name handling. + + + + Gets or sets whether this property's value is serialized as a reference. + + Whether this property's value is serialized as a reference. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets a value indicating whether this property is required. + + + A value indicating whether this property is required. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified name. + + Name of the property. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously skips the children of the current token. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Specifies the state of the reader. + + + + + A read method has not been called. + + + + + The end of the file has been reached successfully. + + + + + Reader is at a property. + + + + + Reader is at the start of an object. + + + + + Reader is in an object. + + + + + Reader is at the start of an array. + + + + + Reader is in an array. + + + + + The method has been called. + + + + + Reader has just read a value. + + + + + Reader is at the start of a constructor. + + + + + Reader is in a constructor. + + + + + An error occurred that prevents the read operation from continuing. + + + + + The end of the file has been reached successfully. + + + + + Gets the current reader state. + + The current reader state. + + + + Gets or sets a value indicating whether the source should be closed when this reader is closed. + + + true to close the source when this reader is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether multiple pieces of JSON content can + be read from a continuous stream without erroring. + + + true to support reading multiple pieces of JSON content; otherwise false. + The default is false. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + Gets or sets how time zones are handled when reading JSON. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Gets or sets how custom date formatted strings are parsed when reading JSON. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + + + + + Gets the type of the current JSON token. + + + + + Gets the text value of the current JSON token. + + + + + Gets the .NET type for the current JSON token. + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Reads the next JSON token from the source. + + true if the next token was read successfully; false if there are no more tokens to read. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Skips the children of the current token. + + + + + Sets the current token. + + The new token. + + + + Sets the current token and value. + + The new token. + The value. + + + + Sets the current token and value. + + The new token. + The value. + A flag indicating whether the position index inside an array should be updated. + + + + Sets the state based on current token type. + + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Changes the reader's state to . + If is set to true, the source is also closed. + + + + + The exception thrown when an error occurs while reading JSON text. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to always serialize the member, and to require that the member has a value. + + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Serializes and deserializes objects into and from the JSON format. + The enables you to control how objects are encoded into JSON. + + + + + Occurs when the errors during serialization and deserialization. + + + + + Gets or sets the used by the serializer when resolving references. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets how type name writing and reading is handled by the serializer. + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + + The type name assembly format. + + + + Gets or sets how object references are preserved by the serializer. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + + + + + Gets or sets how null values are handled during serialization and deserialization. + + + + + Gets or sets how default values are handled during serialization and deserialization. + + + + + Gets or sets how objects are created during deserialization. + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + + The constructor handling. + + + + Gets or sets how metadata properties are used during deserialization. + + The metadata properties handling. + + + + Gets a collection that will be used during serialization. + + Collection that will be used during serialization. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Indicates how JSON text output is formatted. + + + + + Gets or sets how dates are written to JSON text. + + + + + Gets or sets how time zones are handled during serialization and deserialization. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON text. + + + + + Gets or sets how strings are escaped when writing JSON text. + + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + + + + + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + + + true if there will be a check for additional JSON content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Creates a new instance. + The will not use default settings + from . + + + A new instance. + The will not use default settings + from . + + + + + Creates a new instance using the specified . + The will not use default settings + from . + + The settings to be applied to the . + + A new instance using the specified . + The will not use default settings + from . + + + + + Creates a new instance. + The will use default settings + from . + + + A new instance. + The will use default settings + from . + + + + + Creates a new instance using the specified . + The will use default settings + from as well as the specified . + + The settings to be applied to the . + + A new instance using the specified . + The will use default settings + from as well as the specified . + + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to reader values from. + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to reader values from. + The target object to populate values onto. + + + + Deserializes the JSON structure contained by the specified . + + The that contains the JSON structure to deserialize. + The being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The type of the object to deserialize. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Specifies the settings on a object. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) are handled. + + Reference loop handling. + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + + Null value handling. + + + + Gets or sets how default values are handled during serialization and deserialization. + + The default value handling. + + + + Gets or sets a collection that will be used during serialization. + + The converters. + + + + Gets or sets how object references are preserved by the serializer. + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + The type name handling. + + + + Gets or sets how metadata properties are used during deserialization. + + The metadata properties handling. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + + The type name assembly format. + + + + Gets or sets how constructors are used during deserialization. + + The constructor handling. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + The contract resolver. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets the used by the serializer when resolving references. + + The reference resolver. + + + + Gets or sets a function that creates the used by the serializer when resolving references. + + A function that creates the used by the serializer when resolving references. + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the error handler called during serialization and deserialization. + + The error handler called during serialization and deserialization. + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + + + + + Indicates how JSON text output is formatted. + + + + + Gets or sets how dates are written to JSON text. + + + + + Gets or sets how time zones are handled during serialization and deserialization. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Gets or sets how strings are escaped when writing JSON text. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Gets a value indicating whether there will be a check for additional content after deserializing an object. + + + true if there will be a check for additional content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Initializes a new instance of the class with the specified . + + The containing the JSON data to read. + + + + Gets or sets the reader's character buffer pool. + + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, returns false). + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Gets or sets the writer's character array pool. + + + + + Gets or sets how many s to write for each level in the hierarchy when is set to . + + + + + Gets or sets which character to use to quote attribute values. + + + + + Gets or sets which character to use for indenting when is set to . + + + + + Gets or sets a value indicating whether object names will be surrounded with quotes. + + + + + Initializes a new instance of the class using the specified . + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying . + + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the specified end token. + + The end token to write. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Specifies the type of JSON token. + + + + + This is returned by the if a read method has not been called. + + + + + An object start token. + + + + + An array start token. + + + + + A constructor start token. + + + + + An object property name. + + + + + A comment. + + + + + Raw JSON. + + + + + An integer. + + + + + A float. + + + + + A string. + + + + + A boolean. + + + + + A null token. + + + + + An undefined token. + + + + + An object end token. + + + + + An array end token. + + + + + A constructor end token. + + + + + A Date. + + + + + Byte data. + + + + + + Represents a reader that provides validation. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Sets an event handler for receiving schema validation errors. + + + + + Gets the text value of the current JSON token. + + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + + Gets the type of the current JSON token. + + + + + + Gets the .NET type for the current JSON token. + + + + + + Initializes a new instance of the class that + validates the content returned from the given . + + The to read from while validating. + + + + Gets or sets the schema. + + The schema. + + + + Gets the used to construct this . + + The specified in the constructor. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a []. + + + A [] or null if the next JSON token is null. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes the current token. + + The to read the token from. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes the token and its value. + + The to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Asynchronously ets the state of the . + + The being written. + The value being written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asychronousity. + + + + Gets or sets a value indicating whether the destination should be closed when this writer is closed. + + + true to close the destination when this writer is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. + + + true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. + + + + + Gets the top. + + The top. + + + + Gets the state of the writer. + + + + + Gets the path of the writer. + + + + + Gets or sets a value indicating how JSON text output should be formatted. + + + + + Gets or sets how dates are written to JSON text. + + + + + Gets or sets how time zones are handled when writing JSON text. + + + + + Gets or sets how strings are escaped when writing JSON text. + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written to JSON text. + + + + + Gets or sets how and values are formatted when writing JSON text. + + + + + Gets or sets the culture used when writing JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the destination and also flushes the destination. + + + + + Closes this writer. + If is set to true, the destination is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the end of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the end of an array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end constructor. + + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes the end of the current JSON object or array. + + + + + Writes the current token and its children. + + The to read the token from. + + + + Writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + + + + Writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + + + + Writes the token. + + The to write. + + + + Writes the specified end token. + + The end token to write. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON without changing the writer's state. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Sets the state of the . + + The being written. + The value being written. + + + + The exception thrown when an error occurs while writing JSON text. + + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class + with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Specifies how JSON comments are handled when loading JSON. + + + + + Ignore comments. + + + + + Load comments as a with type . + + + + + Specifies how line information is handled when loading JSON. + + + + + Ignore line information. + + + + + Load line information. + + + + + Contains the LINQ to JSON extension methods. + + + + + Returns a collection of tokens that contains the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the descendants of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, and the descendants of every token in the source collection. + + + + Returns a collection of child properties of every object in the source collection. + + An of that contains the source collection. + An of that contains the properties of every object in the source collection. + + + + Returns a collection of child values of every object in the source collection with the given key. + + An of that contains the source collection. + The token key. + An of that contains the values of every token in the source collection with the given key. + + + + Returns a collection of child values of every object in the source collection. + + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child values of every object in the source collection with the given key. + + The type to convert the values to. + An of that contains the source collection. + The token key. + An that contains the converted values of every token in the source collection with the given key. + + + + Returns a collection of converted child values of every object in the source collection. + + The type to convert the values to. + An of that contains the source collection. + An that contains the converted values of every token in the source collection. + + + + Converts the value. + + The type to convert the value to. + A cast as a of . + A converted value. + + + + Converts the value. + + The source collection type. + The type to convert the value to. + A cast as a of . + A converted value. + + + + Returns a collection of child tokens of every array in the source collection. + + The source collection type. + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child tokens of every array in the source collection. + + An of that contains the source collection. + The type to convert the values to. + The source collection type. + An that contains the converted values of every token in the source collection. + + + + Returns the input typed as . + + An of that contains the source collection. + The input typed as . + + + + Returns the input typed as . + + The source collection type. + An of that contains the source collection. + The input typed as . + + + + Represents a collection of objects. + + The type of token. + + + + Gets the of with the specified key. + + + + + + Represents a JSON array. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads an from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the at the specified index. + + + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + + + + + Returns an enumerator that iterates through the collection. + + + A of that can be used to iterate through the collection. + + + + + Adds an item to the . + + The object to add to the . + + + + Removes all items from the . + + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies the elements of the to an array, starting at a particular array index. + + The array. + Index of the array. + + + + Gets a value indicating whether the is read-only. + + true if the is read-only; otherwise, false. + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + + + + Represents a JSON constructor. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets or sets the name of this constructor. + + The constructor name. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name. + + The constructor name. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a token that can contain other tokens. + + + + + Occurs when the list changes or an item in the list changes. + + + + + Occurs before an item is added to the collection. + + + + + Occurs when the items list of the collection has changed, or the collection is reset. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Get the first child token of this token. + + + A containing the first child token of the . + + + + + Get the last child token of this token. + + + A containing the last child token of the . + + + + + Returns a collection of the child tokens of this token, in document order. + + + An of containing the child tokens of this , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A containing the child values of this , in document order. + + + + + Returns a collection of the descendant tokens for this token in document order. + + An of containing the descendant tokens of the . + + + + Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. + + An of containing this token, and all the descendant tokens of the . + + + + Adds the specified content as children of this . + + The content to be added. + + + + Adds the specified content as the first children of this . + + The content to be added. + + + + Creates a that can be used to add tokens to the . + + A that is ready to have content written to it. + + + + Replaces the child nodes of this token with the specified content. + + The content. + + + + Removes the child nodes from this token. + + + + + Merge the specified content into this . + + The content to be merged. + + + + Merge the specified content into this using . + + The content to be merged. + The used to merge the content. + + + + Gets the count of child JSON tokens. + + The count of child JSON tokens. + + + + Represents a collection of objects. + + The type of token. + + + + An empty collection of objects. + + + + + Initializes a new instance of the struct. + + The enumerable. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Gets the of with the specified key. + + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Represents a JSON object. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Occurs when a property value changes. + + + + + Occurs when a property value is changing. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Gets the node type for this . + + The type. + + + + Gets an of of this object's properties. + + An of of this object's properties. + + + + Gets a the specified name. + + The property name. + A with the specified name or null. + + + + Gets a of of this object's property values. + + A of of this object's property values. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the with the specified property name. + + + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified property name. + + Name of the property. + The with the specified property name. + + + + Gets the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + One of the enumeration values that specifies how the strings will be compared. + The with the specified property name. + + + + Tries to get the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + The value. + One of the enumeration values that specifies how the strings will be compared. + true if a value was successfully retrieved; otherwise, false. + + + + Adds the specified property name. + + Name of the property. + The value. + + + + Removes the property with the specified name. + + Name of the property. + true if item was successfully removed; otherwise, false. + + + + Tries to get the with the specified property name. + + Name of the property. + The value. + true if a value was successfully retrieved; otherwise, false. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Represents a JSON property. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the property name. + + The property name. + + + + Gets or sets the property value. + + The property value. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a raw JSON string. + + + + + Asynchronously creates an instance of with the content of the reader's current token. + + The reader. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns an instance of with the content of the reader's current token. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The raw json. + + + + Creates an instance of with the content of the reader's current token. + + The reader. + An instance of with the content of the reader's current token. + + + + Specifies the settings used when merging JSON. + + + + + Gets or sets the method used when merging JSON arrays. + + The method used when merging JSON arrays. + + + + Gets or sets how null value properties are merged. + + How null value properties are merged. + + + + Represents a view of a . + + + + + Initializes a new instance of the class. + + The name. + + + + When overridden in a derived class, returns whether resetting an object changes its value. + + + true if resetting the component changes its value; otherwise, false. + + The component to test for reset capability. + + + + When overridden in a derived class, gets the current value of the property on a component. + + + The value of a property for a given component. + + The component with the property for which to retrieve the value. + + + + When overridden in a derived class, resets the value for this property of the component to the default value. + + The component with the property value that is to be reset to the default value. + + + + When overridden in a derived class, sets the value of the component to a different value. + + The component with the property value that is to be set. + The new value. + + + + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + + + true if the property should be persisted; otherwise, false. + + The component with the property to be examined for persistence. + + + + When overridden in a derived class, gets the type of the component this property is bound to. + + + A that represents the type of component this property is bound to. + When the or + + methods are invoked, the object specified might be an instance of this type. + + + + + When overridden in a derived class, gets a value indicating whether this property is read-only. + + + true if the property is read-only; otherwise, false. + + + + + When overridden in a derived class, gets the type of the property. + + + A that represents the type of the property. + + + + + Gets the hash code for the name of the member. + + + + The hash code for the name of the member. + + + + + Represents an abstract JSON token. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Writes this token to a asynchronously. + + A into which this method will write. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Gets a comparer that can compare two tokens for value equality. + + A that can compare two nodes for value equality. + + + + Gets or sets the parent. + + The parent. + + + + Gets the root of this . + + The root of this . + + + + Gets the node type for this . + + The type. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Compares the values of two tokens, including the values of all descendant tokens. + + The first to compare. + The second to compare. + true if the tokens are equal; otherwise false. + + + + Gets the next sibling token of this node. + + The that contains the next sibling token. + + + + Gets the previous sibling token of this node. + + The that contains the previous sibling token. + + + + Gets the path of the JSON token. + + + + + Adds the specified content immediately after this token. + + A content object that contains simple content or a collection of content objects to be added after this token. + + + + Adds the specified content immediately before this token. + + A content object that contains simple content or a collection of content objects to be added before this token. + + + + Returns a collection of the ancestor tokens of this token. + + A collection of the ancestor tokens of this token. + + + + Returns a collection of tokens that contain this token, and the ancestors of this token. + + A collection of tokens that contain this token, and the ancestors of this token. + + + + Returns a collection of the sibling tokens after this token, in document order. + + A collection of the sibling tokens after this tokens, in document order. + + + + Returns a collection of the sibling tokens before this token, in document order. + + A collection of the sibling tokens before this token, in document order. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets the with the specified key converted to the specified type. + + The type to convert the token to. + The token key. + The converted token value. + + + + Get the first child token of this token. + + A containing the first child token of the . + + + + Get the last child token of this token. + + A containing the last child token of the . + + + + Returns a collection of the child tokens of this token, in document order. + + An of containing the child tokens of this , in document order. + + + + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + + The type to filter the child tokens on. + A containing the child tokens of this , in document order. + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + A containing the child values of this , in document order. + + + + Removes this token from its parent. + + + + + Replaces this token with the specified token. + + The value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Returns the indented JSON for this token. + + + The indented JSON for this token. + + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output should be formatted. + A collection of s which will be used when writing the token. + The JSON for this token using the given formatting and converters. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to []. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from [] to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Creates a for this token. + + A that can be used to read this token and its descendants. + + + + Creates a from an object. + + The object that will be used to create . + A with the value of the specified object. + + + + Creates a from an object using the specified . + + The object that will be used to create . + The that will be used when reading the object. + A with the value of the specified object. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + Creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Selects a using a JPath expression. Selects the token that matches the object path. + + + A that contains a JPath expression. + + A , or null. + + + + Selects a using a JPath expression. Selects the token that matches the object path. + + + A that contains a JPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + A . + + + + Selects a collection of elements using a JPath expression. + + + A that contains a JPath expression. + + An of that contains the selected elements. + + + + Selects a collection of elements using a JPath expression. + + + A that contains a JPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + An of that contains the selected elements. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Creates a new instance of the . All child tokens are recursively cloned. + + A new instance of the . + + + + Adds an object to the annotation list of this . + + The annotation to add. + + + + Get the first annotation object of the specified type from this . + + The type of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets the first annotation object of the specified type from this . + + The of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets a collection of annotations of the specified type for this . + + The type of the annotations to retrieve. + An that contains the annotations for this . + + + + Gets a collection of annotations of the specified type for this . + + The of the annotations to retrieve. + An of that contains the annotations that match the specified type for this . + + + + Removes the annotations of the specified type from this . + + The type of annotations to remove. + + + + Removes the annotations of the specified type from this . + + The of annotations to remove. + + + + Compares tokens to determine whether they are equal. + + + + + Determines whether the specified objects are equal. + + The first object of type to compare. + The second object of type to compare. + + true if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + The for which a hash code is to be returned. + A hash code for the specified object. + The type of is a reference type and is null. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Gets the at the reader's current position. + + + + + Initializes a new instance of the class. + + The token to read from. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Gets the path of the current JSON token. + + + + + Specifies the type of token. + + + + + No token type has been set. + + + + + A JSON object. + + + + + A JSON array. + + + + + A JSON constructor. + + + + + A JSON object property. + + + + + A comment. + + + + + An integer value. + + + + + A float value. + + + + + A string value. + + + + + A boolean value. + + + + + A null value. + + + + + An undefined value. + + + + + A date value. + + + + + A raw JSON value. + + + + + A collection of bytes value. + + + + + A Guid value. + + + + + A Uri value. + + + + + A TimeSpan value. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets the at the writer's current position. + + + + + Gets the token being written. + + The token being written. + + + + Initializes a new instance of the class writing to the given . + + The container being written to. + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the underlying . + + + + + Closes this writer. + If is set to true, the JSON is auto-completed. + + + Setting to true has no additional effect, since the underlying is a type that cannot be closed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end. + + The token. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes a value. + An error will be raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Represents a value in JSON (string, integer, date, etc). + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Creates a comment with the given value. + + The value. + A comment with the given value. + + + + Creates a string with the given value. + + The value. + A string with the given value. + + + + Creates a null value. + + A null value. + + + + Creates a undefined value. + + A undefined value. + + + + Gets the node type for this . + + The type. + + + + Gets or sets the underlying token value. + + The underlying token value. + + + + Writes this token to a . + + A into which this method will write. + A collection of s which will be used when writing the token. + + + + Indicates whether the current object is equal to another object of the same type. + + + true if the current object is equal to the parameter; otherwise, false. + + An object to compare with this object. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + + An object to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than . + Zero + This instance is equal to . + Greater than zero + This instance is greater than . + + + is not of the same type as this instance. + + + + + Specifies the settings used when loading JSON. + + + + + Gets or sets how JSON comments are handled when loading JSON. + + The JSON comment handling. + + + + Gets or sets how JSON line info is handled when loading JSON. + + The JSON line info handling. + + + + Specifies how JSON arrays are merged together. + + + + Concatenate arrays. + + + Union arrays, skipping items that already exist. + + + Replace all array items. + + + Merge array items together, matched by index. + + + + Specifies how null value properties are merged. + + + + + The content's null value properties will be ignored during merging. + + + + + The content's null value properties will be merged. + + + + + Specifies the member serialization options for the . + + + + + All public members are serialized by default. Members can be excluded using or . + This is the default member serialization mode. + + + + + Only members marked with or are serialized. + This member serialization mode can also be set by marking the class with . + + + + + All public and private fields are serialized. Members can be excluded using or . + This member serialization mode can also be set by marking the class with + and setting IgnoreSerializableAttribute on to false. + + + + + Specifies metadata property handling options for the . + + + + + Read metadata properties located at the start of a JSON object. + + + + + Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. + + + + + Do not try to read metadata properties. + + + + + Specifies missing member handling options for the . + + + + + Ignore a missing member and do not attempt to deserialize it. + + + + + Throw a when a missing member is encountered during deserialization. + + + + + Specifies null value handling options for the . + + + + + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Specifies how object creation is handled by the . + + + + + Reuse existing objects, create new objects when needed. + + + + + Only reuse existing objects. + + + + + Always create new objects. + + + + + Specifies reference handling options for the . + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . + + + + + + + + Do not preserve references when serializing types. + + + + + Preserve references when serializing into a JSON object structure. + + + + + Preserve references when serializing into a JSON array structure. + + + + + Preserve references when serializing. + + + + + Specifies reference loop handling options for the . + + + + + Throw a when a loop is encountered. + + + + + Ignore loop references and do not serialize. + + + + + Serialize loop references. + + + + + Indicating whether a property is required. + + + + + The property is not required. The default state. + + + + + The property must be defined in JSON but can be a null value. + + + + + The property must be defined in JSON and cannot be a null value. + + + + + The property is not required but it cannot be a null value. + + + + + + Contains the JSON schema extension methods. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + true if the specified is valid; otherwise, false. + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + When this method returns, contains any error messages generated while validating. + + true if the specified is valid; otherwise, false. + + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + The validation event handler. + + + + + An in-memory representation of a JSON Schema. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the id. + + + + + Gets or sets the title. + + + + + Gets or sets whether the object is required. + + + + + Gets or sets whether the object is read-only. + + + + + Gets or sets whether the object is visible to users. + + + + + Gets or sets whether the object is transient. + + + + + Gets or sets the description of the object. + + + + + Gets or sets the types of values allowed by the object. + + The type. + + + + Gets or sets the pattern. + + The pattern. + + + + Gets or sets the minimum length. + + The minimum length. + + + + Gets or sets the maximum length. + + The maximum length. + + + + Gets or sets a number that the value should be divisible by. + + A number that the value should be divisible by. + + + + Gets or sets the minimum. + + The minimum. + + + + Gets or sets the maximum. + + The maximum. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). + + A flag indicating whether the value can not equal the number defined by the minimum attribute (). + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). + + A flag indicating whether the value can not equal the number defined by the maximum attribute (). + + + + Gets or sets the minimum number of items. + + The minimum number of items. + + + + Gets or sets the maximum number of items. + + The maximum number of items. + + + + Gets or sets the of items. + + The of items. + + + + Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . + + + true if items are validated using their array position; otherwise, false. + + + + + Gets or sets the of additional items. + + The of additional items. + + + + Gets or sets a value indicating whether additional items are allowed. + + + true if additional items are allowed; otherwise, false. + + + + + Gets or sets whether the array items must be unique. + + + + + Gets or sets the of properties. + + The of properties. + + + + Gets or sets the of additional properties. + + The of additional properties. + + + + Gets or sets the pattern properties. + + The pattern properties. + + + + Gets or sets a value indicating whether additional properties are allowed. + + + true if additional properties are allowed; otherwise, false. + + + + + Gets or sets the required property if this property is present. + + The required property if this property is present. + + + + Gets or sets the a collection of valid enum values allowed. + + A collection of valid enum values allowed. + + + + Gets or sets disallowed types. + + The disallowed types. + + + + Gets or sets the default value. + + The default value. + + + + Gets or sets the collection of that this schema extends. + + The collection of that this schema extends. + + + + Gets or sets the format. + + The format. + + + + Initializes a new instance of the class. + + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The object representing the JSON Schema. + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The to use when resolving schema references. + The object representing the JSON Schema. + + + + Load a from a string that contains JSON Schema. + + A that contains JSON Schema. + A populated from the string that contains JSON Schema. + + + + Load a from a string that contains JSON Schema using the specified . + + A that contains JSON Schema. + The resolver. + A populated from the string that contains JSON Schema. + + + + Writes this schema to a . + + A into which this method will write. + + + + Writes this schema to a using the specified . + + A into which this method will write. + The resolver used. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + + Returns detailed information about the schema exception. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + + Generates a from a specified . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets how undefined schemas are handled by the serializer. + + + + + Gets or sets the contract resolver. + + The contract resolver. + + + + Generate a from the specified type. + + The type to generate a from. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + + Resolves from an id. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the loaded schemas. + + The loaded schemas. + + + + Initializes a new instance of the class. + + + + + Gets a for the specified reference. + + The id. + A for the specified reference. + + + + + The value types allowed by the . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + No type specified. + + + + + String type. + + + + + Float type. + + + + + Integer type. + + + + + Boolean type. + + + + + Object type. + + + + + Array type. + + + + + Null type. + + + + + Any type. + + + + + + Specifies undefined schema Id handling options for the . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Do not infer a schema Id. + + + + + Use the .NET type name as the schema Id. + + + + + Use the assembly qualified .NET type name as the schema Id. + + + + + + Returns detailed information related to the . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the associated with the validation error. + + The JsonSchemaException associated with the validation error. + + + + Gets the path of the JSON location where the validation error occurred. + + The path of the JSON location where the validation error occurred. + + + + Gets the text description corresponding to the validation error. + + The text description. + + + + + Represents the callback method that will handle JSON schema validation events and the . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Allows users to control class loading and mandate what class to load. + + + + + When implemented, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object + The type of the object the formatter creates a new instance of. + + + + When implemented, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + A snake case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + A camel case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Resolves member mappings for a type, camel casing property names. + + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used by to resolve a for a given . + + + + + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + + + true if using dynamic code generation; otherwise, false. + + + + + Gets or sets the default members search flags. + + The default members search flags. + + + + Gets or sets a value indicating whether compiler generated members should be serialized. + + + true if serialized compiler generated members; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. + + + true if the interface will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. + + + true if the attribute will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. + + The naming strategy used to resolve how property names and dictionary keys are serialized. + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Gets the serializable members for the type. + + The type to get serializable members for. + The serializable members for the type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates the constructor parameters. + + The constructor to create properties for. + The type's member properties. + Properties for the given . + + + + Creates a for the given . + + The matching member property. + The constructor parameter. + A created for the given . + + + + Resolves the default for the contract. + + Type of the object. + The contract's default . + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Determines which contract type is created for the given type. + + Type of the object. + A for the given type. + + + + Creates properties for the given . + + The type to create properties for. + /// The member serialization mode for the type. + Properties for the given . + + + + Creates the used by the serializer to get and set values from a member. + + The member. + The used by the serializer to get and set values from a member. + + + + Creates a for the given . + + The member's parent . + The member to create a for. + A created for the given . + + + + Resolves the name of the property. + + Name of the property. + Resolved name of the property. + + + + Resolves the name of the extension data. By default no changes are made to extension data names. + + Name of the extension data. + Resolved name of the extension data. + + + + Resolves the key of the dictionary. By default is used to resolve dictionary keys. + + Key of the dictionary. + Resolved key of the dictionary. + + + + Gets the resolved name of the property. + + Name of the property. + Name of the property. + + + + The default naming strategy. Property names and dictionary keys are unchanged. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + The default serialization binder used when resolving and loading classes from type names. + + + + + Initializes a new instance of the class. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + The type of the object the formatter creates a new instance of. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer that writes to the application's instances. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides information surrounding an error. + + + + + Gets the error. + + The error. + + + + Gets the original object that caused the error. + + The original object that caused the error. + + + + Gets the member that caused the error. + + The member that caused the error. + + + + Gets the path of the JSON location where the error occurred. + + The path of the JSON location where the error occurred. + + + + Gets or sets a value indicating whether this is handled. + + true if handled; otherwise, false. + + + + Provides data for the Error event. + + + + + Gets the current object the error event is being raised against. + + The current object the error event is being raised against. + + + + Gets the error context. + + The error context. + + + + Initializes a new instance of the class. + + The current object. + The error context. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides methods to get attributes. + + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Used by to resolve a for a given . + + + + + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + A base class for resolving how property names and dictionary keys are serialized. + + + + + A flag indicating whether dictionary keys should be processed. + Defaults to false. + + + + + A flag indicating whether extension data names should be processed. + Defaults to false. + + + + + A flag indicating whether explicitly specified property names, + e.g. a property name customized with a , should be processed. + Defaults to false. + + + + + Gets the serialized name for a given property name. + + The initial property name. + A flag indicating whether the property has had a name explicitly specified. + The serialized property name. + + + + Gets the serialized name for a given extension data name. + + The initial extension data name. + The serialized extension data name. + + + + Gets the serialized key for a given dictionary key. + + The initial dictionary key. + The serialized dictionary key. + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Used to resolve references when serializing and deserializing JSON by the . + + + + + Resolves a reference to its object. + + The serialization context. + The reference to resolve. + The object that was resolved from the reference. + + + + Gets the reference for the specified object. + + The serialization context. + The object to get a reference for. + The reference to the object. + + + + Determines whether the specified object is referenced. + + The serialization context. + The object to test for a reference. + + true if the specified object is referenced; otherwise, false. + + + + + Adds a reference to the specified object. + + The serialization context. + The reference. + The object to reference. + + + + Represents a trace writer. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + The that will be used to filter the trace messages passed to the writer. + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Provides methods to get and set values. + + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Contract details for a used by the . + + + + + Gets the of the collection items. + + The of the collection items. + + + + Gets a value indicating whether the collection type is a multidimensional array. + + true if the collection type is a multidimensional array; otherwise, false. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the collection values. + + true if the creator has a parameter with the collection values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the default collection items . + + The converter. + + + + Gets or sets a value indicating whether the collection items preserve object references. + + true if collection items preserve object references; otherwise, false. + + + + Gets or sets the collection item reference loop handling. + + The reference loop handling. + + + + Gets or sets the collection item type name handling. + + The type name handling. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Handles serialization callback events. + + The object that raised the callback event. + The streaming context. + + + + Handles serialization error callback events. + + The object that raised the callback event. + The streaming context. + The error context. + + + + Sets extension data for an object during deserialization. + + The object to set extension data on. + The extension data key. + The extension data value. + + + + Gets extension data for an object during serialization. + + The object to set extension data on. + + + + Contract details for a used by the . + + + + + Gets the underlying type for the contract. + + The underlying type for the contract. + + + + Gets or sets the type created during deserialization. + + The type created during deserialization. + + + + Gets or sets whether this type contract is serialized as a reference. + + Whether this type contract is serialized as a reference. + + + + Gets or sets the default for this contract. + + The converter. + + + + Gets or sets all methods called immediately after deserialization of the object. + + The methods called immediately after deserialization of the object. + + + + Gets or sets all methods called during deserialization of the object. + + The methods called during deserialization of the object. + + + + Gets or sets all methods called after serialization of the object graph. + + The methods called after serialization of the object graph. + + + + Gets or sets all methods called before serialization of the object. + + The methods called before serialization of the object. + + + + Gets or sets all method called when an error is thrown during the serialization of the object. + + The methods called when an error is thrown during the serialization of the object. + + + + Gets or sets the default creator method used to create the object. + + The default creator method used to create the object. + + + + Gets or sets a value indicating whether the default creator is non-public. + + true if the default object creator is non-public; otherwise, false. + + + + Contract details for a used by the . + + + + + Gets or sets the dictionary key resolver. + + The dictionary key resolver. + + + + Gets the of the dictionary keys. + + The of the dictionary keys. + + + + Gets the of the dictionary values. + + The of the dictionary values. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the dictionary values. + + true if the creator has a parameter with the dictionary values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets the object's properties. + + The object's properties. + + + + Gets or sets the property name resolver. + + The property name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object constructor. + + The object constructor. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object member serialization. + + The member object serialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Gets the object's properties. + + The object's properties. + + + + Gets a collection of instances that define the parameters used with . + + + + + Gets or sets the function used to create the object. When set this function will override . + This function is called with a collection of arguments which are defined by the collection. + + The function used to create the object. + + + + Gets or sets the extension data setter. + + + + + Gets or sets the extension data getter. + + + + + Gets or sets the extension data value type. + + + + + Gets or sets the extension data name resolver. + + The extension data name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Maps a JSON property to a .NET member or constructor parameter. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the type that declared this property. + + The type that declared this property. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets the name of the underlying member or parameter. + + The name of the underlying member or parameter. + + + + Gets the that will get and set the during serialization. + + The that will get and set the during serialization. + + + + Gets or sets the for this property. + + The for this property. + + + + Gets or sets the type of the property. + + The type of the property. + + + + Gets or sets the for the property. + If set this converter takes precedence over the contract converter for the property type. + + The converter. + + + + Gets or sets the member converter. + + The member converter. + + + + Gets or sets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets or sets a value indicating whether this is readable. + + true if readable; otherwise, false. + + + + Gets or sets a value indicating whether this is writable. + + true if writable; otherwise, false. + + + + Gets or sets a value indicating whether this has a member attribute. + + true if has a member attribute; otherwise, false. + + + + Gets the default value. + + The default value. + + + + Gets or sets a value indicating whether this is required. + + A value indicating whether this is required. + + + + Gets or sets a value indicating whether this property preserves object references. + + + true if this instance is reference; otherwise, false. + + + + + Gets or sets the property null value handling. + + The null value handling. + + + + Gets or sets the property default value handling. + + The default value handling. + + + + Gets or sets the property reference loop handling. + + The reference loop handling. + + + + Gets or sets the property object creation handling. + + The object creation handling. + + + + Gets or sets or sets the type name handling. + + The type name handling. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets a predicate used to determine whether the property should be deserialized. + + A predicate used to determine whether the property should be deserialized. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets an action used to set whether the property has been deserialized. + + An action used to set whether the property has been deserialized. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + A collection of objects. + + + + + Initializes a new instance of the class. + + The type. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Adds a object. + + The property to add to the collection. + + + + Gets the closest matching object. + First attempts to get an exact case match of and then + a case insensitive match. + + Name of the property. + A matching property if found. + + + + Gets a property by property name. + + The name of the property to get. + Type property name string comparison. + A matching property if found. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Lookup and create an instance of the type described by the argument. + + The type to create. + Optional arguments to pass to an initializing constructor of the JsonConverter. + If null, the default constructor is used. + + + + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Initializes a new instance of the class. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Returns an enumeration of the most recent trace messages. + + An enumeration of the most recent trace messages. + + + + Returns a of the most recent trace messages. + + + A of the most recent trace messages. + + + + + Represents a method that constructs an object. + + The object type to create. + + + + When applied to a method, specifies that the method is called when an error occurs serializing an object. + + + + + Provides methods to get attributes from a , , or . + + + + + Initializes a new instance of the class. + + The instance to get attributes for. This parameter should be a , , or . + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Get and set values for a using reflection. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Indicates the method that will be used during deserialization for locating and loading assemblies. + + + + + In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. + + + + + In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. + + + + + Specifies how strings are escaped when writing JSON text. + + + + + Only control characters (e.g. newline) are escaped. + + + + + All non-ASCII and control characters (e.g. newline) are escaped. + + + + + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + + + + + Specifies type name handling options for the . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Do not include the .NET type name when serializing types. + + + + + Include the .NET type name when serializing into a JSON object structure. + + + + + Include the .NET type name when serializing into a JSON array structure. + + + + + Always include the .NET type name when serializing. + + + + + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON + you must specify a root type object with + or . + + + + + Determines whether the collection is null or empty. + + The collection. + + true if the collection is null or empty; otherwise, false. + + + + + Adds the elements of the specified collection to the specified generic . + + The list to add to. + The collection of elements to add. + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert or cast the value to. + + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + + + + + Exponents for both powers of 10 and 0.1 + + + + + Normalized powers of 10 + + + + + Normalized powers of 0.1 + + + + + Exponents for both powers of 10^16 and 0.1^16 + + + + + Normalized powers of 10^16 + + + + + Normalized powers of 0.1^16 + + + + + Packs *10^ as 64-bit floating point value according to IEEE 754 standard + + Sign + Mantissa + Exponent + + Adoption of native function NumberToDouble() from coreclr sources, + see https://github.com/dotnet/coreclr/blob/master/src/classlibnative/bcltype/number.cpp#L451 + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic that returns a result + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Returns a Restrictions object which includes our current restrictions merged + with a restriction limiting our type + + + + + Gets a dictionary of the names and values of an type. + + + + + + Gets a dictionary of the names and values of an Enum type. + + The enum type to get names and values for. + + + + + Gets the type of the typed collection's items. + + The type. + The type of the typed collection's items. + + + + Gets the member's underlying type. + + The member. + The underlying type of the member. + + + + Determines whether the member is an indexed property. + + The member. + + true if the member is an indexed property; otherwise, false. + + + + + Determines whether the property is an indexed property. + + The property. + + true if the property is an indexed property; otherwise, false. + + + + + Gets the member's value on the object. + + The member. + The target object. + The member's value on the object. + + + + Sets the member's value on the target object. + + The member. + The target. + The value. + + + + Determines whether the specified MemberInfo can be read. + + The MemberInfo to determine whether can be read. + /// if set to true then allow the member to be gotten non-publicly. + + true if the specified MemberInfo can be read; otherwise, false. + + + + + Determines whether the specified MemberInfo can be set. + + The MemberInfo to determine whether can be set. + if set to true then allow the member to be set non-publicly. + if set to true then allow the member to be set if read-only. + + true if the specified MemberInfo can be set; otherwise, false. + + + + + Builds a string. Unlike this class lets you reuse its internal buffer. + + + + + Determines whether the string is all white space. Empty string will return false. + + The string to test whether it is all white space. + + true if the string is all white space; otherwise, false. + + + + + Specifies the state of the . + + + + + An exception has been thrown, which has left the in an invalid state. + You may call the method to put the in the Closed state. + Any other method calls result in an being thrown. + + + + + The method has been called. + + + + + An object is being written. + + + + + An array is being written. + + + + + A constructor is being written. + + + + + A property is being written. + + + + + A write method has not been called. + + + + diff --git a/SqlSugarTest/bin/Debug/SqlSugar.dll b/SqlSugarTest/bin/Debug/SqlSugar.dll new file mode 100644 index 0000000..3bef8c9 --- /dev/null +++ b/SqlSugarTest/bin/Debug/SqlSugar.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eec35f490471f08525d970d821378ca80d29d6232f09c6f9db3d2397028cb820 +size 844288 diff --git a/SqlSugarTest/bin/Debug/SqlSugarTest.exe b/SqlSugarTest/bin/Debug/SqlSugarTest.exe new file mode 100644 index 0000000000000000000000000000000000000000..8c0eb62b721f4fdbf9a155630593a410079f4bdc GIT binary patch literal 11264 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 + + + + + + + + + + + + + \ No newline at end of file diff --git a/SqlSugarTest/bin/Debug/SqlSugarTest.pdb b/SqlSugarTest/bin/Debug/SqlSugarTest.pdb new file mode 100644 index 0000000000000000000000000000000000000000..87931ac165bdfae34ea897e8b8e63d1610efc4c3 GIT binary patch literal 19968 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 J17lDF{|B6Rr(gg8 literal 0 HcmV?d00001 diff --git a/SqlSugarTest/bin/Debug/SqlSugarTest.vshost.exe b/SqlSugarTest/bin/Debug/SqlSugarTest.vshost.exe new file mode 100644 index 0000000000000000000000000000000000000000..681ab771eb267aad9397bb2eaf7889c5ac0e15e6 GIT binary patch literal 22696 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 wj{B?PH3nCjG}491+ySfEVd + + + + + + + + + + + + + \ No newline at end of file diff --git a/SqlSugarTest/bin/Debug/SqlSugarTest.vshost.exe.manifest b/SqlSugarTest/bin/Debug/SqlSugarTest.vshost.exe.manifest new file mode 100644 index 0000000..061c9ca --- /dev/null +++ b/SqlSugarTest/bin/Debug/SqlSugarTest.vshost.exe.manifest @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/SqlSugarTest/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/SqlSugarTest/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000000000000000000000000000000000000..ef03e6111ac5afdbd8d7d0682a8e991454ea427c GIT binary patch literal 7375 zcmeHMdvnu95V!LXaUdE6rlC8MTGdn|bltLK9_$La-R-Ke zI`&;X(pMI)gZ|#3#u}4N(DAftSXZFmpb~YDH+>arYq%Il(ZC3iS63u7 zxze)Ln~*`rG*Ad9QPJUG974HvtZP;Hd>iE5)0<0N1ukn5;PHu_M4M_)T$92ErG$Kj z)^m+MVaj!;fKv&5%{}N$Ij*T4C1ng5!-kPc4Wk@Nr_%<0Q2sSqZ7B^NCLOMtttpMn z7vO{Bw)q-E@S*tr{TGH{p06`Egf+(Hhv|4|RZH$S^Epr1Lb|-(+c{_7IP>#t&YpW* zd@?f&g@q>@`7haVPEAcB4jcUq>p54KP7hKvi7bkDQxeM0c~13t0}T>1i5wavXup0q zH;CM3hEa@XM(B2w1ag5?<^l@*8Y7V*F;3zligDu-%9JsIqO@P>(4oaDvg2JQ!HOBI zWxiRi#l$ebGi%P7)A=s1>~P5Cy#wPb)U;k&wBEkp+A6^gw_%m}tO?SpesZf}lgS!V zI7`$&Vs|}kqEyHmYshUXpoF^<6WIzhK!T5)$h4Wg1(~nO)XOMt9kr&**V|SZSsZbd zM&x3HbCJEq6;jX{^$p&Sc#6BmRlFO=)`B@xm?=KVe2f2QDUkFru8}Zzx$ij!5%Uq# zab4p^bO(EorC3LLZ{p4L89Wb|y^Zlery>$>Oya!X&oB?^Ayx?*S*}$Dt&w>t6X|($ zV@#ovM`uv-EC{-|w{Xg<)2Fo8tpWk^J#$q!;3})m{dmD>Rgd&WF}aNjSI(gDt>&NC z7j;JJ?w~rpv}mEwYwCt@hIQ2AWINEhd8q z?mL8IiNJN~aRie?nBPthQa3Ry)!8Vx$FTaekXgrjC(>~jbvTKb8rJ|4BBbvTX(vgf z64T5ifhpZ9aU<*>lJ+vfrpL&zgCJ9oK44;b4 z$fKVTY%58yH=xazTDQ0AeMIw;M0>}5N9-!IETpF*2Ol7$oh0NRo*Mx@OgfST^qTvh z2yKKo!hqNgh;3hwaQa;rMl@^_55zn*x~ce|Ft)kVKB2{)e@5cptdmDugL5l7oBr$( zTM~KS@5S$P75{!?Y%KE&KJ~g+mMSDVtvB*0-X`*h&r$&vVLZZ{kusjNr>Pi=DzwAK zq^UYP(VC@ljjk+}Y-F$TD~cQYOQ#PfmTL`zM1K-ci!gD2Pjy;U1Lx#IUC8yEir6=9dl literal 0 HcmV?d00001 diff --git a/SqlSugarTest/obj/Debug/SqlSugarTest.Form1.resources b/SqlSugarTest/obj/Debug/SqlSugarTest.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/SqlSugarTest/obj/Debug/SqlSugarTest.Properties.Resources.resources b/SqlSugarTest/obj/Debug/SqlSugarTest.Properties.Resources.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/SqlSugarTest/obj/Debug/SqlSugarTest.csproj.FileListAbsolute.txt b/SqlSugarTest/obj/Debug/SqlSugarTest.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..c5bfa19 --- /dev/null +++ b/SqlSugarTest/obj/Debug/SqlSugarTest.csproj.FileListAbsolute.txt @@ -0,0 +1,20 @@ +D:\UGit\DeviceManager\SqlSugarTest\bin\Debug\SqlSugarTest.exe.config +D:\UGit\DeviceManager\SqlSugarTest\bin\Debug\SqlSugarTest.exe +D:\UGit\DeviceManager\SqlSugarTest\bin\Debug\SqlSugarTest.pdb +D:\UGit\DeviceManager\SqlSugarTest\bin\Debug\DeviceRepair.Models.dll +D:\UGit\DeviceManager\SqlSugarTest\bin\Debug\DeviceRepair.Utils.dll +D:\UGit\DeviceManager\SqlSugarTest\bin\Debug\SqlSugar.dll +D:\UGit\DeviceManager\SqlSugarTest\bin\Debug\Newtonsoft.Json.dll +D:\UGit\DeviceManager\SqlSugarTest\bin\Debug\ICSharpCode.SharpZipLib.dll +D:\UGit\DeviceManager\SqlSugarTest\bin\Debug\DeviceRepair.Models.pdb +D:\UGit\DeviceManager\SqlSugarTest\bin\Debug\DeviceRepair.Utils.pdb +D:\UGit\DeviceManager\SqlSugarTest\bin\Debug\Newtonsoft.Json.xml +D:\UGit\DeviceManager\SqlSugarTest\bin\Debug\ICSharpCode.SharpZipLib.pdb +D:\UGit\DeviceManager\SqlSugarTest\bin\Debug\ICSharpCode.SharpZipLib.xml +D:\UGit\DeviceManager\SqlSugarTest\obj\Debug\SqlSugarTest.csprojResolveAssemblyReference.cache +D:\UGit\DeviceManager\SqlSugarTest\obj\Debug\SqlSugarTest.csproj.SqlSugarTest.exe.config +D:\UGit\DeviceManager\SqlSugarTest\obj\Debug\SqlSugarTest.Form1.resources +D:\UGit\DeviceManager\SqlSugarTest\obj\Debug\SqlSugarTest.Properties.Resources.resources +D:\UGit\DeviceManager\SqlSugarTest\obj\Debug\SqlSugarTest.csproj.GenerateResource.Cache +D:\UGit\DeviceManager\SqlSugarTest\obj\Debug\SqlSugarTest.exe +D:\UGit\DeviceManager\SqlSugarTest\obj\Debug\SqlSugarTest.pdb diff --git a/SqlSugarTest/obj/Debug/SqlSugarTest.csproj.GenerateResource.Cache b/SqlSugarTest/obj/Debug/SqlSugarTest.csproj.GenerateResource.Cache new file mode 100644 index 0000000000000000000000000000000000000000..27058344336159f79a9430ae43b2b7500b7e34b7 GIT binary patch literal 976 zcma)4QESvd5Ke58UUFB>J(MB}9^!-0BV4G(z8pfYoEEQAZ7Dv8vdKiLtP3mYY2`tnDHfI-SNFATe#Hm<{qT2ERO9Nwt^`|aKfl9MD(23;`jpz}!(=^+3v7l0VUI6;>Z zlukxnbjeidMV{dZoJT$UzmEczpe^?P1CEPobP2|#Q>yMBa07$*F1nP8lBHCbETmlC zJ{dQsZyUGV + + + + + + + + + + + + + \ No newline at end of file diff --git a/SqlSugarTest/obj/Debug/SqlSugarTest.csprojResolveAssemblyReference.cache b/SqlSugarTest/obj/Debug/SqlSugarTest.csprojResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..5aad66c6609219b41076d43d0104a3e57c49e71d GIT binary patch literal 36716 zcmeI534B!5y~pQ-nMv+7FbOJ4MTmkd1!fY$E_*^q1QH+`cr_SrlAFosWG2qSRux>T zqE=ArQY(s9g<1vd^H|NfssesLgy!p)K z!+*~C&wtMPJ?lO9#>HGN*8#fliK{S=#2E`iEwN}k+LrLoNru9${!_L1*>QhGG^UR! zY0zWwP&6{VY`nh||HhP5B*TehOrIXnlZluX9#gU?*&GhF%-2_+8a-Q&Om8kNZ=29I zsjaN6bwa6Du6YpI3F+ggUmZ{A9rXzov&uic%2{>n#aNLfl`i#oH5F zb67{Jm0l#=5dYLPpA6ImQLVK~Ye__7`DT6!Dxw{oT1<}>A<&9wtG*}}T@h;4V+Byu zht}wB%2C|gpoNoq+~w-k%jNMLRgf;O8WGm8G-p}(TOU5j<{=n5#h_HK#JEY;d%haL;H#CdEA#WvdSZ|u}s&enpI`1m>D z`eaaxQ38q5#&D>)v0kW98Y=yuqdSwgG!$u#u8jMuqOlGmjYm> zLM{42Ekdb{nZ6}@rxuF&PfLWt@y6y*gw)N+U}KF@s({kZ%l8MN&IO@np6@~mb47P% zqf$#~eu#QKF?Ur$kD&D%`RPq@w{&OR%R0h5lYJ$qDtH_l!|onYgNasDa1>N>;8U?>uAtPE+vNHm@xP}8=`B8s*( zL$u$mRhrF&S0FN2Ofl6Q27U&qGMl_o`ciQ74M>Bw;>DKWAy~%=5Bpo& zJIxHN2(vnXrwoB8fj9x;M2Mjf!yx!Ha5!8eAVxxrg7`kfXoxWoVk(TS~ZFp_M0acs+^V?%a zT|?nTS52$HKvGQwrPM&2Lc%+rgjA5q0`hw>*U1%TBx652;hG-$-Z6zU(usZn*+ep-!i)8zK^26U`!0y%|?T=xju8$U%_s$Bmczq&9^T)za zygt;?8P>5(AJ(qL>0WY+9*;+3vtupop#aA6=Xh$zbvA73|4FSE)yc=)ZvSW-LRjhM{vuQ-?*pyiD#Cbe)^$oMvN&* zwf@(hOjy1g^@t4&B}l^CPNF_#Be!e&sI2^8Pe7EHYOUkj^oh;mw27LogCHeDf?+ca z)vTOFLWSdO5)8X0Tpbqb4szsUAH{{@M+)7Cga*%3gnp((Nfgf_fy*<8#KCUvxXHG# zqlwN$&}}r@2aYKnO)HGkAmr+dMR8a|?PzLChQk1e^GL%QR0@1A`QDfWK=Qrb}N)innN8QM$N6JpDAk~eh6_c#CZ_sL#%~Z2XO(!g(QlxrpCpvjz%qeFCvjr z>=%6**F}yMa_@cCl*W*}a+^-fKwA6sJSF^2kq)91L8duCJwV^05~C zE_MAA`nhr)#Ptw2K->uNQ;3@&eg<(f#3mBOSoq;$SnTo4-$IU*%->2XGxHeGc;;^- z2k&)mCr5rW37+r*`aF!v`8oYexdY-(h`S)RKx~Eh1;pJXiZP1fVi-Aja(_vVl;qw+ zDkHgWbj9B?-V~CFrwN^o+GL$R^L07-LA1gq^Q2l$q%Ep6;W*74Ev^?dnVnOgCLGP0 z9S%lgp+tMf0K1ot@l-@3iC8q;w~2<-Xe5Z}=t$TiI-&*P}lESe!h$K;#YoNUO`G1Il&q>h(FCf=
Zw@VVzxmiPZv9j z9DJ^~iyQ@F3{aH^$jj;bH94vTeU(!KIJ_4yhDP)7UO*fX3fRva2Iyo*dYs70bMY~yo8d(FNO&yFWnc&;pm`tlhWv*UL@CQQKG3GlySgT z>Y{8X2m=PO0h}NV@DqdqoFL@IZJr_Gm9r^vq95whDc$>7g&E(8rL^D)iCh z=_+*0fUQEe+5~38Jl}iB(boxss=P*DaG3r;j>RJD>05{M_YzFbFF8klq+r=ea+ZeK zvNTlA(uro4jE1s`erjdO;s_IH4$NM1aE|^$4u&Z;SN~P0{~Kydvbp*#p?(``OuM=I z9iiR_H74R*{jN~I2Q{YVT>ZXK{}0qCHm?3as6T{yolt)y)E`5Aflz-U)Sp6qp-_J& z)PIBeViITrf@Ji0R5%A1CiT2VKPSi0wn8^1_Nwv)eZ#BtOLEj7LX{c;WU5o+TVARA zDPUGW$+0-iH$C(Paq1J6k$Tf$e<7rcb?$t>MCqLBVyHIArA$`{{A zCHcAOp;S;w{*8QANq$D2u9CzO#VSdw#beFEb6Z3q^V}9A3amo7y01_l4fXXxeT+~a z3-t{`-A}0dLw%!A4-o2sP-8X2!~UL79|twoH(WhPsE>ylD;};MEYw4w#u|vLON9Ca zsIe;I>Jx=}DAc!-TCO}oj9=_F`hr*9Ffwy=^e2&08BT&Xj}hdk`!3BR-K2CR1&Zer1?pc2^;Drg8S1-*dYVvAhx#5;r>i30cKTv7 z{m*j^qyBB3%LQb;=-|k|q<(f8Iz2}JzR=zrac=min)8}Bj@w!E{O*yF`g1+=hV4JF zxnITHFGtU4Eg7|EYvJRIuU>!JxGPV2<8t?9LqFcQWB26u&)czQ)U%)6U;g-S9xB*T z#%_GHVBmF+ZXESsaPhT?+Fx#p&wb#o*s>4$zts1I-~IMiw_i|w-V5*l@1~3HzScLc zXy!x5k1C#X`jd%Sc~7zXC{4&hZ~8A^9<;VYnXyuNxCXS)!xnf7X^EcDVnGu0v=f$1 zE{41_-vee8c?^?F#OpCN;=}hSxi-`PZ!NlC-&VWzt4+zD?tSE>f8-?w*`+~5Ujb+_ZX$J04Y7L*E{!o+OICoo**AGg|a|~abbXB&yYZYGWWA2 zvu%4IFSk8Fn=9t_zznMV0`aJTs>~!WdSX?XMK1QR)KRjBB#+8|C-<5Un!P6dl6p<7 zBCK8$Ea7rvHIYL}JpY%4J55zYjMv!EQk8iYNYwyom&6XcU-GEzKV*=0+Caj((*cqX zYs1a-|69A@1 zvBU0?JSw|W2I&qPNZ6@yg7j7nBtcJhf^-HEQ*7Ro>Ut1SRhlfO&ID7pN*J+QB#+8A z$xPjBW9sd+Okuk(H_m18IM+tRi2DYW#&f%>610G72T(Ui46*AakIJr-f%=IJsC{XH z!bWips4NC5Lc|Z`mE=*`k7b&!w9)ilTAJR^(Ujdo-U=c{ zHEE)k7^uoh3#L_o=~9Uwc8TOs*^gwHF1EphyHU>h6Yfgox~44dn$9O;GMyAqm9-XG z>p<382_|;FfPDL-eQk5Glm~I42L5UyMCV5n*%P_UtV8SUJM<3@l)uL@PXls%HV`oSnl`WTPYqZgZ(@qZB+&J}=Ln(_9KdZ_v(ik*7KrS{<0*F;f9+l0N zX{xl*grm4lns6jHM^hHl^bl2W>M>kZd6={YQIC*|&6FTwGbE47rprW4vk~Q`pE`(Q zI8cpwdFt6ocM*M&LoJI@`#n{#G%tUOyar=WlZ#D~uwoM>kIE*qOW z%Z)SiIh3*(r5C7z#TaPZ^xI7ugQgeB#R3vQ%rALVHddx-jEyEda^a*2k6z?x%3_*c zr3w}_88fOqq%mlEja+Pm1P~i8c~o|iOw%wMO?XnrNmD=4=4i@dn*K}`?3_`(Nm_%b zz2ss;B#78x$)mF4WugYzi0V&2brLmzv^k=(n5cKCg1xn!L3-w0RrZm`0O?(FvHlV} zte@mj*|9Q6$Jju^V}VYP@OWSjq$~#MBdXv5buq0atow}vovoNX&2GW#$yDWI`r1J2 z6LK-1L=)>Hc~sV0Myt?<79K5iqJ>9Hb7*BTT3=EHTicua$zy=@cXF|Oi5=#ZJSy|Z zAh~TI;bCMaNP|h611XC^`i3gFuXLW%U%z+(y)#i&4$v0{RCqj<9r)UKCLara_KoCG z+1KQ=p2`1;Ja{G_b}Ac^7OIjQRM~y36Hl+J3s=*fJpT9fR3)Dj222HjX}`n|`%?0# z>xuv{iYbgPO#%d|zWi0N}97@?ek`E?g zeCG5}{8eIA8DbGt0;1lOAYy-(JSzK>Ow=1TqVRqmCsBA$Pp)&y;?8L}5o4`fM_3?@ z1W0=%cG#(;S5Rumli$Nb=C@y=0mmw9$k&4?6oNyn!$`*k$oxS0&M8 zoSB$s(NqnZc1ZxS`y~&(<4dM#r;R4Ou+m8rUR;@@DT`^UC1M7dt2*(AkL&5r7ir

2u^QKzyqGnob*rtO(bqr%iGfzC{( zD;=h*GMTOwrq(+~*O{jDftxt|!aGKNmqJ5V9=l93F?5FXZJ;lBEm=9=Xqq}|=>~`C zjhReu6{c3sH)k^4LSNv@V_Qv=)HBS!?T*lPWD0GU!}NhnrVk5KYg6?R(=>Hc)%TPz zwX*Ycrcie~Okd1oy2oMqS|-ysg{hU+y{4&Rl%6Gh`-JK8D>l9osQP*fdp9LiuW9W2 zSeUNgdC}*io`}z3pGc;7<2-r!<=ZbztrGaVWNKO&rU!)S>(~D9v6t&UrKt=-DL*vY zX4?C3zlg*4Wc%8u*N2{1$Z+2Xrbr`Dwi1B*0CrAsKOk*yf{jpn$Ab;gw5HhMvYVD< zGQ}Q--4uHnX+y;d)ozNFYFbk)J?y4ff}}OYywYwuE0ZZE4R%vZ9@2)20l;pGfgqjf GQU3>8-)VFJ literal 0 HcmV?d00001 diff --git a/SqlSugarTest/obj/Debug/SqlSugarTest.exe b/SqlSugarTest/obj/Debug/SqlSugarTest.exe new file mode 100644 index 0000000000000000000000000000000000000000..8c0eb62b721f4fdbf9a155630593a410079f4bdc GIT binary patch literal 11264 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 J17lDF{|B6Rr(gg8 literal 0 HcmV?d00001 diff --git a/SqlSugarTest/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs b/SqlSugarTest/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs new file mode 100644 index 0000000..e69de29 diff --git a/SqlSugarTest/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs b/SqlSugarTest/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs new file mode 100644 index 0000000..e69de29 diff --git a/SqlSugarTest/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs b/SqlSugarTest/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs new file mode 100644 index 0000000..e69de29 diff --git a/SqlSugarTest/packages.config b/SqlSugarTest/packages.config new file mode 100644 index 0000000..4fa7259 --- /dev/null +++ b/SqlSugarTest/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file