diff --git a/ReleaseFiles/App.config b/ReleaseFiles/App.config index 7123378..d058de3 100644 --- a/ReleaseFiles/App.config +++ b/ReleaseFiles/App.config @@ -11,6 +11,11 @@ + + + + + @@ -163,6 +168,10 @@ + + + + diff --git a/ReleaseFiles/Host/BR.AN.PviServices.dll b/ReleaseFiles/Host/BR.AN.PviServices.dll new file mode 100644 index 0000000..8742a64 Binary files /dev/null and b/ReleaseFiles/Host/BR.AN.PviServices.dll differ diff --git a/ReleaseFiles/Host/Newtonsoft.Json.dll b/ReleaseFiles/Host/Newtonsoft.Json.dll new file mode 100644 index 0000000..341d08f Binary files /dev/null and b/ReleaseFiles/Host/Newtonsoft.Json.dll differ diff --git a/ReleaseFiles/Host/Newtonsoft.Json.xml b/ReleaseFiles/Host/Newtonsoft.Json.xml new file mode 100644 index 0000000..2c981ab --- /dev/null +++ b/ReleaseFiles/Host/Newtonsoft.Json.xml @@ -0,0 +1,11363 @@ + + + + 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. + The default value is false. + + true if the written enum text will be camel case; otherwise, false. + + + + Gets or sets the naming strategy used to resolve how enum text is written. + + The naming strategy used to resolve how enum text is written. + + + + Gets or sets a value indicating whether integer values are allowed when serializing and deserializing. + The default value is true. + + true if integers are allowed when serializing and 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. + + + + Initializes a new instance of the class. + + The naming strategy used to resolve how enum text is written. + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + 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. + + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + 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. + + true if integers are allowed when serializing and deserializing; 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 Unix epoch time + + + + + Gets or sets a value indicating whether the dates before Unix epoch + should converted to and from JSON. + + + true to allow converting dates before Unix epoch to and from JSON; + false to throw an exception when a date being converted to or from JSON + occurred before Unix epoch. The default value is false. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + true to allow converting dates before Unix epoch to and from JSON; + false to throw an exception when a date being converted to or from JSON + occurred before Unix epoch. The default value is 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 property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + 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 value 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. + + + + Gets or sets a value indicating whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + true if special characters are encoded; 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 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. + + + + + The default JSON name table implementation. + + + + + Initializes a new instance of the class. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Adds the specified string into name table. + + The string to add. + This method is not thread-safe. + The resolved string. + + + + 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 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 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 value 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 . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + 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 value 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 . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + 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. + + + + Converts an object to and from JSON. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + 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. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. If there is no existing value then null will be used. + The existing value has a value. + 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. + + + + + 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. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + 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. + + + + + Base class for a table of atomized string objects. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Instructs the how to serialize the object. + + + + + Gets or sets the member serialization. + + The member serialization. + + + + Gets or sets the missing member handling used when deserializing this object. + + The missing member handling. + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + 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 type used when serializing the property's collection items. + + The collection's items type. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 . + A null value means there is no maximum. + The default value is 64. + + + + + 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. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + 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. + + + + + 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. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + 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. + + + + 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. + The default value is . + + + 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 default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + The default value is . + + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + 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. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 64. + + + + + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + The default value is false. + + + 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 read values from. + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read 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. + The default value is . + + 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. + The default value is . + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + Null value handling. + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + 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 default value is . + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + 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 default value is . + + The metadata properties handling. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + 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. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is 64. + + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets a value indicating whether there will be a check for additional content after deserializing an object. + The default value is false. + + + true if there will be a check for additional content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + using values copied from the passed in . + + + + + 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 property name table. + + + + + 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 https://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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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 asynchronicity. + + + + 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. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + 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 duplicate property names are handled when loading JSON. + + + + + Replace the existing value when there is a duplicate property. The value of the last property in the JSON object will be used. + + + + + Ignore the new value when there is a duplicate property. The value of the first property in the JSON object will be used. + + + + + Throw a when a duplicate property is encountered. + + + + + 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 with the specified name. + + The property name. + A with the specified name or null. + + + + Gets the with the specified name. + The exact name will be searched for first and if no matching property is found then + the will be used to match a property. + + The property name. + One of the enumeration values that specifies how the strings will be compared. + A matched 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. + + + + Determines whether the JSON object has the specified property name. + + Name of the property. + true if the JSON object has the specified property name; otherwise, false. + + + + 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 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 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 cloning JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets a flag that indicates whether to copy annotations when cloning a . + The default value is true. + + + A flag that indicates whether to copy annotations when cloning a . + + + + + Specifies the settings used when loading JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets how JSON comments are handled when loading JSON. + The default value is . + + The JSON comment handling. + + + + Gets or sets how JSON line info is handled when loading JSON. + The default value is . + + The JSON line info handling. + + + + Gets or sets how duplicate property names in JSON objects are handled when loading JSON. + The default value is . + + The JSON duplicate property name handling. + + + + Specifies the settings used when merging JSON. + + + + + Initializes a new instance of the class. + + + + + 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. + + + + Gets or sets the comparison used to match property names while merging. + 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. + + The comparison used to match property names while merging. + + + + Specifies the settings used when selecting JSON. + + + + + Gets or sets a timeout that will be used when executing regular expressions. + + The timeout that will be used when executing regular expressions. + + + + Gets or sets a flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + A flag that indicates whether an error should be thrown if + no tokens are found when evaluating part of the expression. + + + + + 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. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + 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 JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + A , or null. + + + + Selects a using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath 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 using a JSONPath expression. Selects the token that matches the object path. + + + A that contains a JSONPath expression. + + The used to select tokens. + A . + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + An of that contains the selected elements. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath 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. + + + + Selects a collection of elements using a JSONPath expression. + + + A that contains a JSONPath expression. + + The used to select tokens. + 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 . + + + + Creates a new instance of the . All child tokens are recursively cloned. + + A object to configure cloning settings. + 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. + + + + Initializes a new instance of the class. + + The token to read from. + The initial path of the token. It is prepended to the returned . + + + + 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. + + + ToString() returns a non-JSON string value for tokens with a type of . + If you want the JSON for all token types then you should use . + + + 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 how line information is handled when loading JSON. + + + + + Ignore line information. + + + + + Load line information. + + + + + 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 https://www.newtonsoft.com/jsonschema for more details. + + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://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 https://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 https://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 https://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 https://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 https://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. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + + Generates a from a specified . + + + JSON Schema validation has been moved to its own package. See https://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 https://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 https://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 https://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 https://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 https://www.newtonsoft.com/jsonschema for more details. + + + + + + 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 a value indicating whether to ignore IsSpecified members when serializing and deserializing types. + + + true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types. + + + true if the ShouldSerialize members 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. + + + + 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. + + + + 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. + + + + 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 the internally resolved for the contract's type. + This converter is used as a fallback converter when no other converter is resolved. + Setting will always override this 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 the missing member handling used when deserializing this object. + + The missing member handling. + + + + 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 or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + 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 a value indicating whether has a value specified. + + + + + 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. + + + + A kebab 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. + + + + 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. + + + + + 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. + + + + Hash code calculation + + + + + + Object equality implementation + + + + + + + Compare to another NamingStrategy + + + + + + + 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. + + + + 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. + + + + 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. + + + + + 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 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. + + + + + 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 + + + + + Helper class for serializing immutable collections. + Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed + https://github.com/JamesNK/Newtonsoft.Json/issues/652 + + + + + 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 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. + + + + Specifies that an output will not be null even if the corresponding type allows it. + + + Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. + + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this value, the associated parameter will not be null. + + + + Gets the return value condition. + + + Specifies that an output may be null even if the corresponding type disallows it. + + + Specifies that null is allowed as an input even if the corresponding type disallows it. + + + + Specifies that the method will not return if the associated Boolean parameter is passed the specified value. + + + + + Initializes a new instance of the class. + + + The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to + the associated parameter matches this value. + + + + Gets the condition parameter value. + + + diff --git a/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Host.exe b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Host.exe new file mode 100644 index 0000000..dee81ce Binary files /dev/null and b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Host.exe differ diff --git a/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Host.exe.config b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Host.exe.config new file mode 100644 index 0000000..c4d2f1f --- /dev/null +++ b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Host.exe.config @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Host.pdb b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Host.pdb new file mode 100644 index 0000000..fa83151 Binary files /dev/null and b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Host.pdb differ diff --git a/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Messages.dll b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Messages.dll new file mode 100644 index 0000000..66887b7 Binary files /dev/null and b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Messages.dll differ diff --git a/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Messages.pdb b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Messages.pdb new file mode 100644 index 0000000..6998920 Binary files /dev/null and b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.Messages.pdb differ diff --git a/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.dll b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.dll new file mode 100644 index 0000000..325a7e3 Binary files /dev/null and b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.dll differ diff --git a/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.pdb b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.pdb new file mode 100644 index 0000000..452d2e1 Binary files /dev/null and b/ReleaseFiles/Host/XP.Hardware.RaySource.Comet.pdb differ diff --git a/ReleaseFiles/MORCODE.dll b/ReleaseFiles/MORCODE.dll new file mode 100644 index 0000000..abefaca Binary files /dev/null and b/ReleaseFiles/MORCODE.dll differ diff --git a/ReleaseFiles/XP.Camera.dll b/ReleaseFiles/XP.Camera.dll index c927ba4..a2b6549 100644 Binary files a/ReleaseFiles/XP.Camera.dll and b/ReleaseFiles/XP.Camera.dll differ diff --git a/ReleaseFiles/XP.Camera.pdb b/ReleaseFiles/XP.Camera.pdb index 728c2e3..a33d06a 100644 Binary files a/ReleaseFiles/XP.Camera.pdb and b/ReleaseFiles/XP.Camera.pdb differ diff --git a/ReleaseFiles/XP.Common.dll b/ReleaseFiles/XP.Common.dll index a8833d8..f89692a 100644 Binary files a/ReleaseFiles/XP.Common.dll and b/ReleaseFiles/XP.Common.dll differ diff --git a/ReleaseFiles/XP.Common.pdb b/ReleaseFiles/XP.Common.pdb index c0fc2a9..1656a24 100644 Binary files a/ReleaseFiles/XP.Common.pdb and b/ReleaseFiles/XP.Common.pdb differ diff --git a/ReleaseFiles/XP.Hardware.Detector.dll b/ReleaseFiles/XP.Hardware.Detector.dll index 9d8a578..7d920b4 100644 Binary files a/ReleaseFiles/XP.Hardware.Detector.dll and b/ReleaseFiles/XP.Hardware.Detector.dll differ diff --git a/ReleaseFiles/XP.Hardware.Detector.pdb b/ReleaseFiles/XP.Hardware.Detector.pdb index 6b4aa4e..a82bcb8 100644 Binary files a/ReleaseFiles/XP.Hardware.Detector.pdb and b/ReleaseFiles/XP.Hardware.Detector.pdb differ diff --git a/ReleaseFiles/XP.Hardware.MotionControl.dll b/ReleaseFiles/XP.Hardware.MotionControl.dll index d44058d..49436bd 100644 Binary files a/ReleaseFiles/XP.Hardware.MotionControl.dll and b/ReleaseFiles/XP.Hardware.MotionControl.dll differ diff --git a/ReleaseFiles/XP.Hardware.MotionControl.pdb b/ReleaseFiles/XP.Hardware.MotionControl.pdb index 8f0de88..510aac2 100644 Binary files a/ReleaseFiles/XP.Hardware.MotionControl.pdb and b/ReleaseFiles/XP.Hardware.MotionControl.pdb differ diff --git a/ReleaseFiles/XP.Hardware.PLC.dll b/ReleaseFiles/XP.Hardware.PLC.dll index 6f3d513..8a25c62 100644 Binary files a/ReleaseFiles/XP.Hardware.PLC.dll and b/ReleaseFiles/XP.Hardware.PLC.dll differ diff --git a/ReleaseFiles/XP.Hardware.PLC.pdb b/ReleaseFiles/XP.Hardware.PLC.pdb index 4c2e8ae..b218bc2 100644 Binary files a/ReleaseFiles/XP.Hardware.PLC.pdb and b/ReleaseFiles/XP.Hardware.PLC.pdb differ diff --git a/ReleaseFiles/XP.Hardware.RaySource.Comet.Messages.dll b/ReleaseFiles/XP.Hardware.RaySource.Comet.Messages.dll index 24b0107..db95be5 100644 Binary files a/ReleaseFiles/XP.Hardware.RaySource.Comet.Messages.dll and b/ReleaseFiles/XP.Hardware.RaySource.Comet.Messages.dll differ diff --git a/ReleaseFiles/XP.Hardware.RaySource.Comet.Messages.pdb b/ReleaseFiles/XP.Hardware.RaySource.Comet.Messages.pdb index 7fe6daf..ae9c9f0 100644 Binary files a/ReleaseFiles/XP.Hardware.RaySource.Comet.Messages.pdb and b/ReleaseFiles/XP.Hardware.RaySource.Comet.Messages.pdb differ diff --git a/ReleaseFiles/XP.Hardware.RaySource.dll b/ReleaseFiles/XP.Hardware.RaySource.dll index 21e3295..0a5e6f5 100644 Binary files a/ReleaseFiles/XP.Hardware.RaySource.dll and b/ReleaseFiles/XP.Hardware.RaySource.dll differ diff --git a/ReleaseFiles/XP.Hardware.RaySource.pdb b/ReleaseFiles/XP.Hardware.RaySource.pdb index 6176218..e4a3431 100644 Binary files a/ReleaseFiles/XP.Hardware.RaySource.pdb and b/ReleaseFiles/XP.Hardware.RaySource.pdb differ diff --git a/ReleaseFiles/XP.ImageProcessing.CfgControl.dll b/ReleaseFiles/XP.ImageProcessing.CfgControl.dll index 5924248..6fbced8 100644 Binary files a/ReleaseFiles/XP.ImageProcessing.CfgControl.dll and b/ReleaseFiles/XP.ImageProcessing.CfgControl.dll differ diff --git a/ReleaseFiles/XP.ImageProcessing.CfgControl.pdb b/ReleaseFiles/XP.ImageProcessing.CfgControl.pdb index 9e87d84..05dbc9f 100644 Binary files a/ReleaseFiles/XP.ImageProcessing.CfgControl.pdb and b/ReleaseFiles/XP.ImageProcessing.CfgControl.pdb differ diff --git a/ReleaseFiles/XP.ImageProcessing.Core.dll b/ReleaseFiles/XP.ImageProcessing.Core.dll index 0af1c02..1897d42 100644 Binary files a/ReleaseFiles/XP.ImageProcessing.Core.dll and b/ReleaseFiles/XP.ImageProcessing.Core.dll differ diff --git a/ReleaseFiles/XP.ImageProcessing.Core.pdb b/ReleaseFiles/XP.ImageProcessing.Core.pdb index 3690f67..804d908 100644 Binary files a/ReleaseFiles/XP.ImageProcessing.Core.pdb and b/ReleaseFiles/XP.ImageProcessing.Core.pdb differ diff --git a/ReleaseFiles/XP.ImageProcessing.Processors.dll b/ReleaseFiles/XP.ImageProcessing.Processors.dll index 645297e..4a55b56 100644 Binary files a/ReleaseFiles/XP.ImageProcessing.Processors.dll and b/ReleaseFiles/XP.ImageProcessing.Processors.dll differ diff --git a/ReleaseFiles/XP.ImageProcessing.Processors.pdb b/ReleaseFiles/XP.ImageProcessing.Processors.pdb index 7b55029..6464535 100644 Binary files a/ReleaseFiles/XP.ImageProcessing.Processors.pdb and b/ReleaseFiles/XP.ImageProcessing.Processors.pdb differ diff --git a/ReleaseFiles/XP.ImageProcessing.RoiControl.dll b/ReleaseFiles/XP.ImageProcessing.RoiControl.dll index d478d53..f57b07e 100644 Binary files a/ReleaseFiles/XP.ImageProcessing.RoiControl.dll and b/ReleaseFiles/XP.ImageProcessing.RoiControl.dll differ diff --git a/ReleaseFiles/XP.ImageProcessing.RoiControl.pdb b/ReleaseFiles/XP.ImageProcessing.RoiControl.pdb index 5441b82..cb5f3ff 100644 Binary files a/ReleaseFiles/XP.ImageProcessing.RoiControl.pdb and b/ReleaseFiles/XP.ImageProcessing.RoiControl.pdb differ diff --git a/ReleaseFiles/XP.ReportEngine.dll b/ReleaseFiles/XP.ReportEngine.dll index c3d733d..8218dfb 100644 Binary files a/ReleaseFiles/XP.ReportEngine.dll and b/ReleaseFiles/XP.ReportEngine.dll differ diff --git a/ReleaseFiles/XP.ReportEngine.pdb b/ReleaseFiles/XP.ReportEngine.pdb index ffd6093..1956889 100644 Binary files a/ReleaseFiles/XP.ReportEngine.pdb and b/ReleaseFiles/XP.ReportEngine.pdb differ diff --git a/ReleaseFiles/XplorePlane.deps.json b/ReleaseFiles/XplorePlane.deps.json index 7583502..d92f969 100644 --- a/ReleaseFiles/XplorePlane.deps.json +++ b/ReleaseFiles/XplorePlane.deps.json @@ -2422,6 +2422,7 @@ "Serilog": "4.3.1", "Serilog.Sinks.Console": "6.1.1", "Serilog.Sinks.File": "7.0.0", + "XP.Common": "1.0.0", "XP.ImageProcessing.Core": "1.0.0" }, "runtime": { diff --git a/ReleaseFiles/XplorePlane.dll b/ReleaseFiles/XplorePlane.dll index 8f80c5a..42d7f53 100644 Binary files a/ReleaseFiles/XplorePlane.dll and b/ReleaseFiles/XplorePlane.dll differ diff --git a/ReleaseFiles/XplorePlane.dll.config b/ReleaseFiles/XplorePlane.dll.config index 7123378..ff77769 100644 --- a/ReleaseFiles/XplorePlane.dll.config +++ b/ReleaseFiles/XplorePlane.dll.config @@ -5,127 +5,88 @@ - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -138,7 +99,6 @@ - @@ -151,46 +111,33 @@ - - - - - - - + + + - - - - - - - - - - - diff --git a/ReleaseFiles/XplorePlane.exe b/ReleaseFiles/XplorePlane.exe index c60cd80..bdc726b 100644 Binary files a/ReleaseFiles/XplorePlane.exe and b/ReleaseFiles/XplorePlane.exe differ diff --git a/ReleaseFiles/XplorePlane.pdb b/ReleaseFiles/XplorePlane.pdb index 05fa658..812134c 100644 Binary files a/ReleaseFiles/XplorePlane.pdb and b/ReleaseFiles/XplorePlane.pdb differ diff --git a/XP.Common/Database/Configs/ConfigLoader.cs b/XP.Common/Database/Configs/ConfigLoader.cs new file mode 100644 index 0000000..37289c5 --- /dev/null +++ b/XP.Common/Database/Configs/ConfigLoader.cs @@ -0,0 +1,46 @@ +using System.Configuration; + +namespace XP.Common.Database.Configs +{ + /// + /// SQLite 配置加载器,从 App.config 读取数据库相关配置项 | SQLite configuration loader, reads database-related configuration from App.config + /// + public static class ConfigLoader + { + /// + /// 配置键前缀 | Configuration key prefix + /// + private const string KeyPrefix = "Sqlite:"; + + /// + /// 从 App.config 加载 SQLite 配置 | Load SQLite configuration from App.config + /// + /// SQLite 配置实体,缺失或无效配置项使用默认值 | SQLite configuration entity, uses default values for missing or invalid items + public static SqliteConfig LoadSqliteConfig() + { + var config = new SqliteConfig(); + + // 加载数据库文件路径 | Load database file path + var dbPath = ConfigurationManager.AppSettings[KeyPrefix + "DbFilePath"]; + if (!string.IsNullOrEmpty(dbPath)) config.DbFilePath = dbPath; + + // 加载连接超时时间 | Load connection timeout + var timeout = ConfigurationManager.AppSettings[KeyPrefix + "ConnectionTimeout"]; + if (int.TryParse(timeout, out var t) && t > 0) config.ConnectionTimeout = t; + + // 加载是否自动创建 | Load create if not exists + var createIfNotExists = ConfigurationManager.AppSettings[KeyPrefix + "CreateIfNotExists"]; + if (bool.TryParse(createIfNotExists, out var c)) config.CreateIfNotExists = c; + + // 加载是否启用 WAL 模式 | Load enable WAL mode + var enableWal = ConfigurationManager.AppSettings[KeyPrefix + "EnableWalMode"]; + if (bool.TryParse(enableWal, out var w)) config.EnableWalMode = w; + + // 加载是否开启 SQL 日志 | Load enable SQL logging + var enableSqlLog = ConfigurationManager.AppSettings[KeyPrefix + "EnableSqlLogging"]; + if (bool.TryParse(enableSqlLog, out var l)) config.EnableSqlLogging = l; + + return config; + } + } +} diff --git a/XP.Common/Configs/SqliteConfig.cs b/XP.Common/Database/Configs/SqliteConfig.cs similarity index 71% rename from XP.Common/Configs/SqliteConfig.cs rename to XP.Common/Database/Configs/SqliteConfig.cs index 28eae43..3fdf579 100644 --- a/XP.Common/Configs/SqliteConfig.cs +++ b/XP.Common/Database/Configs/SqliteConfig.cs @@ -1,46 +1,42 @@ using System; -using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -namespace XP.Common.Configs +namespace XP.Common.Database.Configs { /// - /// SQLite 配置实体 + /// SQLite 配置实体(从 App.config 读取)| SQLite configuration entity (loaded from App.config) /// public class SqliteConfig { /// - /// 数据库文件路径 + /// 数据库文件路径 | Database file path /// public string DbFilePath { get; set; } = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Files", "Data", "XP.db"); /// - /// 连接超时时间(秒,默认30) + /// 连接超时时间(秒,默认30)| Connection timeout (seconds, default 30) /// public int ConnectionTimeout { get; set; } = 30; /// - /// 数据库不存在时是否自动创建(默认true) + /// 数据库不存在时是否自动创建(默认true)| Whether to auto-create if not exists (default true) /// public bool CreateIfNotExists { get; set; } = true; /// - /// 是否启用 WAL 模式(提升并发性能,默认true) + /// 是否启用 WAL 模式(提升并发性能,默认true)| Whether to enable WAL mode (default true) /// public bool EnableWalMode { get; set; } = true; /// - /// 是否开启日志记录(记录所有SQL操作,默认false) + /// 是否开启日志记录(记录所有SQL操作,默认false)| Whether to enable SQL logging (default false) /// public bool EnableSqlLogging { get; set; } = false; /// - /// 获取SQLite连接字符串 + /// 获取 SQLite 连接字符串 | Get SQLite connection string /// public string GetConnectionString() { diff --git a/XP.Common/Database/Implementations/SqliteContext.cs b/XP.Common/Database/Implementations/SqliteContext.cs index e77cc05..dd45188 100644 --- a/XP.Common/Database/Implementations/SqliteContext.cs +++ b/XP.Common/Database/Implementations/SqliteContext.cs @@ -7,7 +7,7 @@ using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; -using XP.Common.Configs; +using XP.Common.Database.Configs; using XP.Common.Database.Interfaces; using XP.Common.Database.Models; using XP.Common.Helpers; diff --git a/XP.Common/Documents/License.README.md b/XP.Common/Documents/License.README.md new file mode 100644 index 0000000..fec5ada --- /dev/null +++ b/XP.Common/Documents/License.README.md @@ -0,0 +1,184 @@ +# 授权服务使用指南 | License Service Usage Guide + +## 概述 | Overview + +XplorePlane 通过 `XP.Common.License` 命名空间下的 `ILicenseService` 提供统一的授权管理。底层基于海克斯康 CLMS(Computational License Management System)SDK,使用 `MORCODE.dll` 进行许可证校验。 + +## 产品授权信息 | Product License Information + +| 项目 | 值 | +| --- | --- | +| CLMS 模块 ID(Module ID) | `4` | +| 零件号(Part Number) | `LS950-0071-5-1` | + +`Module ID` 是 CLMS 在 SDK 中标识本产品的唯一编号,调用 `CLM_ModuleIsLicensed` 时必须传入此值;`Part Number` 是产品在 CLMS 许可发行系统中的物料编号,用于申请、签发、续期许可证。 + +## 授权模式 | License Modes + +`LicenseMode` 枚举定义见 `XP.Common.License.Enums.LicenseMode`: + +| 模式 | 枚举值 | 数值 | 说明 | +| --- | --- | --- | --- | +| CLMS 正式授权 | `Clms` | `0` | 通过 CLMS SDK 进行完整授权校验,包含登录、许可范围、模块、SMA、到期日期等检查 | +| 临时测试模式 | `TemporaryTest` | `885` | 不调用 CLMS SDK,直接放行 15 分钟,用于研发/测试场景 | + +## 配置项 | Configuration Items + +授权配置位于主应用 `App.config` 中,键前缀为 `License:`,对应 `XP.Common.License.Configs.LicenseConfig`: + +```xml + + + + + + + +``` + +| 键 | 类型 | 默认值 | 有效值 | 说明 | +| --- | --- | --- | --- | --- | +| `License:LicenseMode` | int | `0` | `0`、`885` | 授权模式 | +| `License:ModuleId` | ushort | `4` | `1` ~ `65535` | CLMS 模块 ID | +| `License:UseSma` | bool | `false` | `true`、`false` | 是否启用 SMA(软件维护协议)校验 | +| `License:LicenseState` | int | `20` | `10`、`20` | 上次运行时的授权结果,由服务自动维护 | + +> 配置中无效或缺失的键会回退到默认值,详见 `XP.Common.License.Configs.ConfigLoader`。 + +## 正式授权流程 | Formal Authorization Flow + +`LicenseMode = 0`(`Clms`)时,`LicenseService.CheckAuthorization()` 依次执行以下步骤: + +1. **系统时间检查**(可选):调用 `CLM_CheckSystemTime`,老版本 SDK 缺失此入口点时跳过。 +2. **登录验证**:调用 `CLM_Login`(核心步骤,必须存在)。 +3. **许可范围检查**:调用 `CLM_Login_Scope`(核心步骤)。 +4. **SMA 验证**(可选):仅当 `License:UseSma = true` 时执行。比较 SMA 年份/季度与当前软件主版本号/次版本号,季度不匹配会判定失败。 +5. **浮动许可信息**(可选):通过 `CLM_GetIP` 获取 IP 与端口。 +6. **错误信息读取**(可选):通过 `CLM_GetError` 拉取 SDK 端错误描述。 +7. **模块授权检查**:调用 `CLM_ModuleIsLicensed`,传入 `Module ID = 4`。 +8. **到期日期获取**:调用 `CLM_GetWarrantyExpiration`,剩余 ≤ 30 天时记录警告。 + +任意核心步骤失败即视为授权失败,写回 `License:LicenseState = 20`,主应用弹窗提示并退出。 + +## 临时测试模式 | Temporary Test Mode + +`LicenseMode = 885`(`TemporaryTest`)用于跳过 CLMS 校验,便于离线开发和功能演示。 + +### 行为 | Behavior + +- 不加载 `MORCODE.dll`,不调用任何 CLMS API,授权直接通过。 +- 启动后立刻开启 15 分钟(900 秒)倒计时,到期触发 `TestModeTimeout` 事件,主应用应执行优雅关闭。 +- 倒计时途中分别在剩余 5 分钟、1 分钟时触发 `TestModeWarning5Min`、`TestModeWarning1Min` 事件用于提醒。 +- 上述三个事件只在临时测试模式下被触发,正式授权(`Clms`)下不会创建计时器。 + +### 启用方式 | How to Enable + +修改主应用 `App.config`: + +```xml + +``` + +启动后将看到提示:「当前为临时测试模式,软件将在 15 分钟后自动关闭」。 + +> **注意**:临时测试模式仅用于研发与内部测试场景,**禁止用于生产或交付**。发布前请务必将 `License:LicenseMode` 还原为 `0`。 + +## 使用示例 | Usage Examples + +### 注入并校验 | Inject and Verify + +```csharp +using XP.Common.License.Interfaces; +using XP.Common.License.Enums; + +public class StartupChecker +{ + private readonly ILicenseService _licenseService; + private readonly ILoggerService _logger; + + public StartupChecker(ILicenseService licenseService, ILoggerService logger) + { + _licenseService = licenseService ?? throw new ArgumentNullException(nameof(licenseService)); + _logger = logger?.ForModule() ?? throw new ArgumentNullException(nameof(logger)); + } + + public bool Run() + { + var result = _licenseService.CheckAuthorization(); + if (!result.IsAuthorized) + { + _logger.Error(null, "授权失败:{Message} | License failed: {Message}", result.Message); + return false; + } + + // 仅在临时测试模式下订阅倒计时事件 | Subscribe countdown events only in test mode + if (_licenseService.LicenseMode == LicenseMode.TemporaryTest) + { + _licenseService.TestModeWarning5Min += (s, e) => _logger.Warn("临时测试模式剩余 5 分钟"); + _licenseService.TestModeWarning1Min += (s, e) => _logger.Warn("临时测试模式剩余 1 分钟"); + _licenseService.TestModeTimeout += (s, e) => Application.Current.Shutdown(); + } + return true; + } +} +``` + +### 检查特定模块授权 | Check Module Authorization + +```csharp +const ushort XplorePlaneModuleId = 4; +if (!_licenseService.IsModuleLicensed(XplorePlaneModuleId)) +{ + _logger.Warn("模块 {ModuleId} 未授权 | Module {ModuleId} not licensed", XplorePlaneModuleId); +} +``` + +### 读取授权信息 | Read License Information + +```csharp +DateTime? expiration = _licenseService.GetExpirationDate(); // 授权到期日期 +DateTime? sma = _licenseService.GetSmaDate(); // SMA 到期日期 +int remaining = _licenseService.GetRemainingTestTime(); // 临时测试剩余秒数;非测试模式返回 -1 +``` + +## 接口与事件 | Interface & Events + +`ILicenseService` 提供以下成员(详见 `XP.Common.License.Interfaces.ILicenseService`): + +- `LicenseCheckResult CheckAuthorization()`:执行完整授权校验。 +- `bool IsAuthorized`:当前会话是否已授权。 +- `LicenseMode LicenseMode`:当前授权模式。 +- `DateTime? GetExpirationDate()`:授权到期日期。 +- `DateTime? GetSmaDate()`:SMA 到期日期。 +- `bool IsModuleLicensed(ushort moduleId)`:检查指定模块是否被授权。 +- `int GetRemainingTestTime()`:临时测试模式剩余秒数。 +- 事件:`TestModeWarning5Min`、`TestModeWarning1Min`、`TestModeTimeout`。 + +## 常见问题 | FAQ + +### 1. 启动时提示 `MORCODE.dll 加载失败` | `Failed to load MORCODE.dll` + +确认 `MORCODE.dll` 已随 `ReleaseFiles` 一同部署,并位于主程序同级目录。研发阶段可临时切换到临时测试模式绕过。 + +### 2. 提示「模块号码 4 不可用」| `Module 4 unavailable` + +CLMS 服务器签发的许可证未包含 `Module ID = 4`(零件号 `LS950-0071-5-1`)。请联系海克斯康许可团队确认许可范围。 + +### 3. SMA 校验失败 | SMA validation failed + +SMA 年份必须 ≥ 软件主版本号;同年时 SMA 季度必须 ≥ 软件次版本号。若需临时绕过,可将 `License:UseSma` 设为 `false`,但发布版本仍应保持 SMA 校验启用。 + +### 4. 授权成功后是否还有倒计时?| Will the countdown still trigger after a successful formal authorization? + +不会。倒计时仅在 `LicenseMode = TemporaryTest` 时启动,`Clms` 正式授权下三个事件永远不会被触发。 + +## 相关文件 | Related Files + +- `XP.Common/License/Interfaces/ILicenseService.cs` — 服务接口 +- `XP.Common/License/Implementations/LicenseService.cs` — 服务实现 +- `XP.Common/License/Configs/LicenseConfig.cs` — 配置实体 +- `XP.Common/License/Configs/ConfigLoader.cs` — 配置加载器 +- `XP.Common/License/Enums/LicenseMode.cs` — 授权模式枚举 +- `XP.Common/License/Enums/LicenseState.cs` — 授权状态枚举 +- `XP.Common/License/Native/NativeMethods.cs` — CLMS SDK P/Invoke 封装 +- `XplorePlane/App.xaml.cs` — 主应用启动时调用 `PerformLicenseCheck()` 的入口 diff --git a/XP.Common/Dump/Configs/ConfigLoader.cs b/XP.Common/Dump/Configs/ConfigLoader.cs new file mode 100644 index 0000000..5adec98 --- /dev/null +++ b/XP.Common/Dump/Configs/ConfigLoader.cs @@ -0,0 +1,46 @@ +using System.Configuration; + +namespace XP.Common.Dump.Configs +{ + /// + /// Dump 配置加载器,从 App.config 读取 Dump 相关配置项 | Dump configuration loader, reads dump-related configuration from App.config + /// + public static class ConfigLoader + { + /// + /// 配置键前缀 | Configuration key prefix + /// + private const string KeyPrefix = "Dump:"; + + /// + /// 从 App.config 加载 Dump 配置 | Load Dump configuration from App.config + /// + /// Dump 配置实体,缺失或无效配置项使用默认值 | Dump configuration entity, uses default values for missing or invalid items + public static DumpConfig LoadDumpConfig() + { + var config = new DumpConfig(); + + // 加载存储路径 | Load storage path + var storagePath = ConfigurationManager.AppSettings[KeyPrefix + "StoragePath"]; + if (!string.IsNullOrEmpty(storagePath)) config.StoragePath = storagePath; + + // 加载是否启用定时触发 | Load enable scheduled dump + var enableScheduled = ConfigurationManager.AppSettings[KeyPrefix + "EnableScheduledDump"]; + if (bool.TryParse(enableScheduled, out var enabled)) config.EnableScheduledDump = enabled; + + // 加载定时触发间隔 | Load scheduled interval + var interval = ConfigurationManager.AppSettings[KeyPrefix + "ScheduledIntervalMinutes"]; + if (int.TryParse(interval, out var min) && min > 0) config.ScheduledIntervalMinutes = min; + + // 加载 Mini Dump 文件大小上限 | Load Mini Dump size limit + var sizeLimit = ConfigurationManager.AppSettings[KeyPrefix + "MiniDumpSizeLimitMB"]; + if (long.TryParse(sizeLimit, out var size) && size > 0) config.MiniDumpSizeLimitMB = size; + + // 加载文件保留天数 | Load retention days + var retentionDays = ConfigurationManager.AppSettings[KeyPrefix + "RetentionDays"]; + if (int.TryParse(retentionDays, out var days) && days > 0) config.RetentionDays = days; + + return config; + } + } +} diff --git a/XP.Common/Helpers/ConfigLoader.cs b/XP.Common/Helpers/ConfigLoader.cs deleted file mode 100644 index 60d29ab..0000000 --- a/XP.Common/Helpers/ConfigLoader.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Configuration; -using XP.Common.Configs; -using XP.Common.Dump.Configs; - -namespace XP.Common.Helpers -{ - /// - /// 通用配置加载工具(读取App.config) - /// - public static class ConfigLoader - { - /// - /// 加载Serilog配置 - /// - public static SerilogConfig LoadSerilogConfig() - { - var config = new SerilogConfig(); - - var logPath = ConfigurationManager.AppSettings["Serilog:LogPath"]; - if (!string.IsNullOrEmpty(logPath)) config.LogPath = logPath; - - var minLevel = ConfigurationManager.AppSettings["Serilog:MinimumLevel"]; - if (!string.IsNullOrEmpty(minLevel)) config.MinimumLevel = minLevel; - - var enableConsole = ConfigurationManager.AppSettings["Serilog:EnableConsole"]; - if (bool.TryParse(enableConsole, out var console)) config.EnableConsole = console; - - var rollingInterval = ConfigurationManager.AppSettings["Serilog:RollingInterval"]; - if (!string.IsNullOrEmpty(rollingInterval)) config.RollingInterval = rollingInterval; - - var fileSize = ConfigurationManager.AppSettings["Serilog:FileSizeLimitMB"]; - if (long.TryParse(fileSize, out var size)) config.FileSizeLimitMB = size; - - var retainCount = ConfigurationManager.AppSettings["Serilog:RetainedFileCountLimit"]; - if (int.TryParse(retainCount, out var count)) config.RetainedFileCountLimit = count; - - return config; - } - - /// - /// 加载SQLite配置 - /// - public static SqliteConfig LoadSqliteConfig() - { - var config = new SqliteConfig(); - - var dbPath = ConfigurationManager.AppSettings["Sqlite:DbFilePath"]; - if (!string.IsNullOrEmpty(dbPath)) config.DbFilePath = dbPath; - - var timeout = ConfigurationManager.AppSettings["Sqlite:ConnectionTimeout"]; - if (int.TryParse(timeout, out var t)) config.ConnectionTimeout = t; - - var createIfNotExists = ConfigurationManager.AppSettings["Sqlite:CreateIfNotExists"]; - if (bool.TryParse(createIfNotExists, out var c)) config.CreateIfNotExists = c; - - var enableWal = ConfigurationManager.AppSettings["Sqlite:EnableWalMode"]; - if (bool.TryParse(enableWal, out var w)) config.EnableWalMode = w; - - var enableSqlLog = ConfigurationManager.AppSettings["Sqlite:EnableSqlLogging"]; - if (bool.TryParse(enableSqlLog, out var l)) config.EnableSqlLogging = l; - - return config; - } - - /// - /// 加载 Dump 配置 | Load Dump configuration - /// - public static DumpConfig LoadDumpConfig() - { - var config = new DumpConfig(); - - var storagePath = ConfigurationManager.AppSettings["Dump:StoragePath"]; - if (!string.IsNullOrEmpty(storagePath)) config.StoragePath = storagePath; - - var enableScheduled = ConfigurationManager.AppSettings["Dump:EnableScheduledDump"]; - if (bool.TryParse(enableScheduled, out var enabled)) config.EnableScheduledDump = enabled; - - var interval = ConfigurationManager.AppSettings["Dump:ScheduledIntervalMinutes"]; - if (int.TryParse(interval, out var min)) config.ScheduledIntervalMinutes = min; - - var sizeLimit = ConfigurationManager.AppSettings["Dump:MiniDumpSizeLimitMB"]; - if (long.TryParse(sizeLimit, out var size)) config.MiniDumpSizeLimitMB = size; - - var retentionDays = ConfigurationManager.AppSettings["Dump:RetentionDays"]; - if (int.TryParse(retentionDays, out var days)) config.RetentionDays = days; - - return config; - } - - } -} \ No newline at end of file diff --git a/XP.Common/License/Configs/ConfigLoader.cs b/XP.Common/License/Configs/ConfigLoader.cs new file mode 100644 index 0000000..0fc4bad --- /dev/null +++ b/XP.Common/License/Configs/ConfigLoader.cs @@ -0,0 +1,102 @@ +using System.Configuration; + +namespace XP.Common.License.Configs +{ + /// + /// 授权配置加载器,从 App.config 读取授权相关配置项 | License configuration loader, reads license-related configuration from App.config + /// + public static class ConfigLoader + { + /// + /// 配置键前缀 | Configuration key prefix + /// + private const string KeyPrefix = "License:"; + + /// + /// LicenseMode 有效值集合 | Valid values for LicenseMode + /// + private static readonly int[] ValidLicenseModes = { 0, 885 }; + + /// + /// LicenseState 有效值集合 | Valid values for LicenseState + /// + private static readonly int[] ValidLicenseStates = { 10, 20 }; + + /// + /// 从 App.config 加载授权配置 | Load license configuration from App.config + /// + /// 授权配置实体,缺失或无效配置项使用默认值 | License configuration entity, uses default values for missing or invalid items + public static LicenseConfig LoadLicenseConfig() + { + var config = new LicenseConfig(); + + // 加载 LicenseMode | Load LicenseMode + var licenseModeStr = ConfigurationManager.AppSettings[KeyPrefix + "LicenseMode"]; + if (int.TryParse(licenseModeStr, out var licenseMode) && IsValidLicenseMode(licenseMode)) + { + config.LicenseMode = licenseMode; + } + + // 加载 ModuleId | Load ModuleId + var moduleIdStr = ConfigurationManager.AppSettings[KeyPrefix + "ModuleId"]; + if (ushort.TryParse(moduleIdStr, out var moduleId) && IsValidModuleId(moduleId)) + { + config.ModuleId = moduleId; + } + + // 加载 UseSma | Load UseSma + var useSmaStr = ConfigurationManager.AppSettings[KeyPrefix + "UseSma"]; + if (bool.TryParse(useSmaStr, out var useSma)) + { + config.UseSma = useSma; + } + + // 加载 LicenseState | Load LicenseState + var licenseStateStr = ConfigurationManager.AppSettings[KeyPrefix + "LicenseState"]; + if (int.TryParse(licenseStateStr, out var licenseState) && IsValidLicenseState(licenseState)) + { + config.LicenseState = licenseState; + } + + return config; + } + + /// + /// 验证 LicenseMode 值是否有效 | Validate whether LicenseMode value is valid + /// + /// 待验证的值 | Value to validate + /// true 表示有效,false 表示无效 | true if valid, false if invalid + private static bool IsValidLicenseMode(int value) + { + foreach (var valid in ValidLicenseModes) + { + if (value == valid) return true; + } + return false; + } + + /// + /// 验证 ModuleId 值是否在有效范围内 | Validate whether ModuleId value is within valid range + /// + /// 待验证的值 | Value to validate + /// true 表示有效,false 表示无效 | true if valid, false if invalid + private static bool IsValidModuleId(ushort value) + { + return value >= 1 && value <= 65535; + } + + /// + /// 验证 LicenseState 值是否有效 | Validate whether LicenseState value is valid + /// + /// 待验证的值 | Value to validate + /// true 表示有效,false 表示无效 | true if valid, false if invalid + private static bool IsValidLicenseState(int value) + { + foreach (var valid in ValidLicenseStates) + { + if (value == valid) return true; + } + return false; + } + } +} diff --git a/XP.Common/License/Configs/LicenseConfig.cs b/XP.Common/License/Configs/LicenseConfig.cs new file mode 100644 index 0000000..386d39d --- /dev/null +++ b/XP.Common/License/Configs/LicenseConfig.cs @@ -0,0 +1,28 @@ +namespace XP.Common.License.Configs +{ + /// + /// 授权配置实体 | License configuration entity + /// + public class LicenseConfig + { + /// + /// 授权模式 | License mode + /// + public int LicenseMode { get; set; } = 0; + + /// + /// 模块ID | Module ID + /// + public ushort ModuleId { get; set; } = 4; + + /// + /// 是否使用SMA | Whether to use SMA + /// + public bool UseSma { get; set; } = false; + + /// + /// 授权状态 | License state + /// + public int LicenseState { get; set; } = 20; + } +} diff --git a/XP.Common/License/Enums/LicenseMode.cs b/XP.Common/License/Enums/LicenseMode.cs new file mode 100644 index 0000000..2646fa4 --- /dev/null +++ b/XP.Common/License/Enums/LicenseMode.cs @@ -0,0 +1,17 @@ +namespace XP.Common.License.Enums; + +/// +/// 授权模式枚举 | License mode enumeration +/// +public enum LicenseMode : int +{ + /// + /// CLMS 正式授权 | CLMS formal authorization + /// + Clms = 0, + + /// + /// 临时测试模式(15分钟)| Temporary test mode (15 minutes) + /// + TemporaryTest = 885 +} diff --git a/XP.Common/License/Enums/LicenseState.cs b/XP.Common/License/Enums/LicenseState.cs new file mode 100644 index 0000000..940e20b --- /dev/null +++ b/XP.Common/License/Enums/LicenseState.cs @@ -0,0 +1,17 @@ +namespace XP.Common.License.Enums; + +/// +/// 授权状态枚举 | License state enumeration +/// +public enum LicenseState : int +{ + /// + /// 授权成功 | Authorization successful + /// + Success = 10, + + /// + /// 授权失败 | Authorization failed + /// + Fail = 20 +} diff --git a/XP.Common/License/Implementations/LicenseCheckResult.cs b/XP.Common/License/Implementations/LicenseCheckResult.cs new file mode 100644 index 0000000..b901791 --- /dev/null +++ b/XP.Common/License/Implementations/LicenseCheckResult.cs @@ -0,0 +1,91 @@ +using System; +using XP.Common.License.Enums; + +namespace XP.Common.License.Implementations +{ + /// + /// 授权检查结果(不可变)| License check result (immutable) + /// + public sealed class LicenseCheckResult + { + /// + /// 消息最大长度 | Maximum message length + /// + private const int MaxMessageLength = 512; + + /// + /// 是否授权成功 | Whether authorization is successful + /// + public bool IsAuthorized { get; } + + /// + /// 结果消息(最大512字符)| Result message (maximum 512 characters) + /// + public string Message { get; } + + /// + /// 授权模式 | License mode + /// + public LicenseMode LicenseMode { get; } + + /// + /// 模块ID | Module ID + /// + public ushort ModuleId { get; } + + /// + /// 授权到期日期 | License expiration date + /// + public DateTime? ExpirationDate { get; } + + /// + /// SMA到期日期 | SMA expiration date + /// + public DateTime? SmaDate { get; } + + /// + /// 浮动许可IP地址 | Floating license IP address + /// + public string? FloatingLicenseIp { get; } + + /// + /// 浮动许可端口 | Floating license port + /// + public string? FloatingLicensePort { get; } + + /// + /// 构造函数 | Constructor + /// + /// 是否授权成功 | Whether authorization is successful + /// 结果消息 | Result message + /// 授权模式 | License mode + /// 模块ID | Module ID + /// 授权到期日期 | License expiration date + /// SMA到期日期 | SMA expiration date + /// 浮动许可IP地址 | Floating license IP address + /// 浮动许可端口 | Floating license port + public LicenseCheckResult( + bool isAuthorized, + string message, + LicenseMode licenseMode, + ushort moduleId, + DateTime? expirationDate, + DateTime? smaDate, + string? floatingLicenseIp, + string? floatingLicensePort) + { + IsAuthorized = isAuthorized; + Message = string.IsNullOrEmpty(message) + ? string.Empty + : message.Length > MaxMessageLength + ? message[..MaxMessageLength] + : message; + LicenseMode = licenseMode; + ModuleId = moduleId; + ExpirationDate = expirationDate; + SmaDate = smaDate; + FloatingLicenseIp = floatingLicenseIp; + FloatingLicensePort = floatingLicensePort; + } + } +} \ No newline at end of file diff --git a/XP.Common/License/Implementations/LicenseService.cs b/XP.Common/License/Implementations/LicenseService.cs new file mode 100644 index 0000000..622183d --- /dev/null +++ b/XP.Common/License/Implementations/LicenseService.cs @@ -0,0 +1,595 @@ +using System; +using System.Configuration; +using System.Reflection; +using System.Text; +using System.Threading; +using XP.Common.License.Configs; +using XP.Common.License.Enums; +using XP.Common.License.Interfaces; +using XP.Common.License.Native; +using XP.Common.Logging.Interfaces; + +namespace XP.Common.License.Implementations +{ + /// + /// 授权服务实现 | License service implementation + /// + public class LicenseService : ILicenseService, IDisposable + { + /// + /// 临时测试模式初始时间(秒)| Temporary test mode initial time (seconds) + /// + private const int TestModeInitialSeconds = 900; + + /// + /// 授权配置 | License configuration + /// + private readonly LicenseConfig _config; + + /// + /// 日志服务 | Logger service + /// + private readonly ILoggerService _logger; + + /// + /// 同步锁对象 | Synchronization lock object + /// + private readonly object _lock = new object(); + + /// + /// 临时测试模式计时器 | Temporary test mode timer + /// + private Timer? _testModeTimer; + + /// + /// 临时测试模式剩余时间(秒)| Temporary test mode remaining time (seconds) + /// + private int _remainingTestSeconds = TestModeInitialSeconds; + + /// + /// 授权到期日期 | License expiration date + /// + private DateTime? _expirationDate; + + /// + /// SMA到期日期 | SMA expiration date + /// + private DateTime? _smaDate; + + /// + /// 浮动许可IP地址 | Floating license IP address + /// + private string? _floatingLicenseIp; + + /// + /// 浮动许可端口 | Floating license port + /// + private string? _floatingLicensePort; + + /// + /// 是否已释放 | Whether disposed + /// + private bool _disposed; + + /// + /// 构造函数 | Constructor + /// + /// 授权配置 | License configuration + /// 日志服务 | Logger service + public LicenseService(LicenseConfig config, ILoggerService logger) + { + _config = config ?? throw new ArgumentNullException(nameof(config)); + _logger = logger?.ForModule() ?? throw new ArgumentNullException(nameof(logger)); + LicenseMode = (LicenseMode)_config.LicenseMode; + } + + /// + /// 当前会话是否已授权 | Whether the current session is authorized + /// + public bool IsAuthorized { get; private set; } + + /// + /// 当前授权模式 | Current license mode + /// + public LicenseMode LicenseMode { get; private set; } + + /// + /// 临时测试模式超时事件(到期时触发)| Temporary test mode timeout event (fires when expired) + /// + public event EventHandler? TestModeTimeout; + + /// + /// 临时测试模式剩余5分钟警告事件 | Temporary test mode 5-minute warning event + /// + public event EventHandler? TestModeWarning5Min; + + /// + /// 临时测试模式剩余1分钟警告事件 | Temporary test mode 1-minute warning event + /// + public event EventHandler? TestModeWarning1Min; + + /// + /// 是否已触发5分钟警告 | Whether 5-minute warning has been fired + /// + private bool _warning5MinFired; + + /// + /// 是否已触发1分钟警告 | Whether 1-minute warning has been fired + /// + private bool _warning1MinFired; + + /// + /// 执行授权检查 | Perform authorization check + /// + /// 授权检查结果 | License check result + public LicenseCheckResult CheckAuthorization() + { + lock (_lock) + { + _logger.Info("开始授权检查,模式={Mode} | Starting authorization check, mode={Mode}", (int)LicenseMode); + + if (LicenseMode == Enums.LicenseMode.TemporaryTest) + { + return HandleTemporaryTestMode(); + } + + return HandleClmsAuthorization(); + } + } + + /// + /// 获取授权到期日期 | Get license expiration date + /// + /// 授权到期日期,未授权时返回 null | License expiration date, null if not authorized + public DateTime? GetExpirationDate() + { + lock (_lock) + { + return _expirationDate; + } + } + + /// + /// 检查模块是否授权 | Check if module is licensed + /// + /// 模块ID | Module ID + /// 模块是否授权 | Whether the module is licensed + public bool IsModuleLicensed(ushort moduleId) + { + lock (_lock) + { + if (!IsAuthorized) + return false; + + try + { + ushort mod = moduleId; + ushort type = 0; + return NativeMethods.CLM_ModuleIsLicensed(ref mod, ref type); + } + catch (DllNotFoundException ex) + { + _logger.Error(ex, "MORCODE.dll 加载失败 | Failed to load MORCODE.dll"); + return false; + } + catch (EntryPointNotFoundException ex) + { + _logger.Error(ex, "MORCODE.dll 中缺少入口点 | Missing entry point in MORCODE.dll"); + return false; + } + } + } + + /// + /// 获取SMA到期日期 | Get SMA expiration date + /// + /// SMA到期日期,未启用时返回 null | SMA expiration date, null if not enabled + public DateTime? GetSmaDate() + { + lock (_lock) + { + return _smaDate; + } + } + + /// + /// 获取临时测试模式剩余时间 | Get remaining time in temporary test mode + /// + /// 剩余时间(秒),非测试模式返回 -1 | Remaining time in seconds, -1 if not in test mode + public int GetRemainingTestTime() + { + if (LicenseMode != Enums.LicenseMode.TemporaryTest) + return -1; + + return Interlocked.CompareExchange(ref _remainingTestSeconds, 0, 0); + } + + /// + /// 释放资源 | Release resources + /// + public void Dispose() + { + if (_disposed) + return; + + _disposed = true; + + // 停止计时器 | Stop timer + _testModeTimer?.Dispose(); + _testModeTimer = null; + + // 尝试登出 | Try to logout + try + { + NativeMethods.CLM_Logout(); + } + catch (Exception ex) + { + _logger.Error(ex, "CLM_Logout 调用失败 | CLM_Logout call failed"); + } + } + + /// + /// 处理临时测试模式 | Handle temporary test mode + /// + /// 授权检查结果 | License check result + private LicenseCheckResult HandleTemporaryTestMode() + { + IsAuthorized = true; + _remainingTestSeconds = TestModeInitialSeconds; + + // 启动计时器,每秒递减 | Start timer, decrement every second + _testModeTimer?.Dispose(); + _testModeTimer = new Timer(TestModeTimerCallback, null, 1000, 1000); + + _logger.Info("临时测试模式已启动,剩余时间={Seconds}秒 | Temporary test mode started, remaining time={Seconds}s", TestModeInitialSeconds); + + WriteLicenseStateToConfig(LicenseState.Success); + + return new LicenseCheckResult( + isAuthorized: true, + message: "临时测试模式已启动,有效时间15分钟 | Temporary test mode started, valid for 15 minutes", + licenseMode: Enums.LicenseMode.TemporaryTest, + moduleId: _config.ModuleId, + expirationDate: null, + smaDate: null, + floatingLicenseIp: null, + floatingLicensePort: null); + } + + /// + /// 临时测试模式计时器回调 | Temporary test mode timer callback + /// + /// 状态对象 | State object + private void TestModeTimerCallback(object? state) + { + int remaining = Interlocked.Decrement(ref _remainingTestSeconds); + + // 剩余5分钟(300秒)时触发警告 | Fire warning at 5 minutes (300 seconds) remaining + if (remaining <= 300 && !_warning5MinFired) + { + _warning5MinFired = true; + _logger.Warn("临时测试模式剩余5分钟 | Temporary test mode: 5 minutes remaining"); + TestModeWarning5Min?.Invoke(this, EventArgs.Empty); + } + + // 剩余1分钟(60秒)时触发警告 | Fire warning at 1 minute (60 seconds) remaining + if (remaining <= 60 && !_warning1MinFired) + { + _warning1MinFired = true; + _logger.Warn("临时测试模式剩余1分钟 | Temporary test mode: 1 minute remaining"); + TestModeWarning1Min?.Invoke(this, EventArgs.Empty); + } + + // 到期时触发超时事件 | Fire timeout event when expired + if (remaining <= 0) + { + // 停止计时器 | Stop timer + _testModeTimer?.Dispose(); + _testModeTimer = null; + + _logger.Info("临时测试模式已超时 | Temporary test mode has timed out"); + + // 触发超时事件 | Raise timeout event + TestModeTimeout?.Invoke(this, EventArgs.Empty); + } + } + + /// + /// 处理 CLMS 正式授权流程 | Handle CLMS formal authorization flow + /// 兼容新旧版本 SDK:对可能不存在的入口点使用 TryInvoke 优雅降级 | + /// Compatible with old/new SDK: gracefully degrades for missing entry points via TryInvoke + /// + /// 授权检查结果 | License check result + private LicenseCheckResult HandleClmsAuthorization() + { + try + { + // 步骤 1:检查系统时间(可选,老版本 SDK 可能不支持)| Step 1: Check system time (optional, old SDK may not support) + if (!TryInvokeOptional(() => NativeMethods.CLM_CheckSystemTime(), "CLM_CheckSystemTime", out bool checkTimeResult)) + { + // 入口点不存在,跳过此步骤 | Entry point not found, skip this step + _logger.Warn("CLM_CheckSystemTime 入口点不存在,跳过系统时间检查(SDK版本较旧)| CLM_CheckSystemTime entry point not found, skipping system time check (older SDK version)"); + } + else if (!checkTimeResult) + { + _logger.Error(new InvalidOperationException("CLM_CheckSystemTime"), "系统时间检查异常 | System time check anomaly"); + return CreateFailureResult("系统时间检查异常 | System time check anomaly"); + } + else + { + _logger.Info("系统时间检查正常 | System time check: OK"); + } + + // 步骤 2:登录验证(核心,必须存在)| Step 2: Login verification (core, must exist) + StringBuilder password = new StringBuilder("FnEoFWSNLpVeoNWYhVoHLfgITRvieSszJfylVsXOTsLkphgkPzPhbLQzQrvRbNOkVVIQyMWkyGVjWSaiYUEksfQsRmklksLxrmeTksKKNMoZoWfZeDaLDSyWwEmtQakvSNxBMBLHoLEZHtaoXNpTWiaUGaSLQdsHFZnbRyPehytarNTKpaNNqnjFNggqWifhFsrZasDsWbIGWDrhnGrdtUNDMjJdhlTunsssxCzYpsLQrWBxUkuUUEJraSbTlbuX"); + if (!NativeMethods.CLM_Login(password)) + { + _logger.Error(new InvalidOperationException("CLM_Login"), "CLM_Login 登录验证失败 | CLM_Login verification failed"); + return CreateFailureResult("CLM_Login 登录验证失败 | CLM_Login verification failed"); + } + _logger.Info("CLM_Login 登录验证成功 | CLM_Login verification: OK"); + + // 步骤 3:检查许可范围(核心,必须存在)| Step 3: Check license scope (core, must exist) + if (!NativeMethods.CLM_Login_Scope()) + { + _logger.Error(new InvalidOperationException("CLM_Login_Scope"), "CLM_Login_Scope 许可范围检查失败 | CLM_Login_Scope scope check failed"); + return CreateFailureResult("CLM_Login_Scope 许可范围检查失败 | CLM_Login_Scope scope check failed"); + } + _logger.Info("CLM_Login_Scope 许可范围检查成功 | CLM_Login_Scope scope check: OK"); + + // 步骤 4:SMA 验证(如果启用,可选入口点)| Step 4: SMA validation (if enabled, optional entry point) + if (_config.UseSma) + { + var smaResult = ValidateSma(); + if (smaResult != null) + return smaResult; + } + else + { + _logger.Info("放弃检查SMA | SMA check skipped"); + } + + // 步骤 5:获取浮动许可IP和端口(可选,老版本 SDK 可能不支持)| Step 5: Get floating license IP and port (optional, old SDK may not support) + StringBuilder ip = new StringBuilder(256); + StringBuilder port = new StringBuilder(256); + if (!TryInvokeOptional(() => NativeMethods.CLM_GetIP(ip, port), "CLM_GetIP", out bool getIpResult)) + { + _logger.Warn("CLM_GetIP 入口点不存在,跳过浮动许可IP获取(SDK版本较旧)| CLM_GetIP entry point not found, skipping floating license IP retrieval (older SDK version)"); + } + else if (!getIpResult) + { + _logger.Error(new InvalidOperationException("CLM_GetIP"), "CLM_GetIP 获取浮动许可IP失败 | CLM_GetIP floating license IP retrieval failed"); + return CreateFailureResult("CLM_GetIP 获取浮动许可IP失败 | CLM_GetIP floating license IP retrieval failed"); + } + else + { + _floatingLicenseIp = ip.ToString(); + _floatingLicensePort = port.ToString(); + _logger.Info("CLM_GetIP 成功: ip={Ip}/port={Port} | CLM_GetIP success: ip={Ip}/port={Port}", _floatingLicenseIp, _floatingLicensePort); + } + + // 步骤 6:获取错误信息(可选,老版本 SDK 可能不支持)| Step 6: Get error message (optional, old SDK may not support) + StringBuilder error = new StringBuilder(512); + if (!TryInvokeOptional(() => NativeMethods.CLM_GetError(error), "CLM_GetError", out bool getErrorResult)) + { + _logger.Warn("CLM_GetError 入口点不存在,跳过错误信息获取(SDK版本较旧)| CLM_GetError entry point not found, skipping error retrieval (older SDK version)"); + } + else if (!getErrorResult) + { + _logger.Error(new InvalidOperationException("CLM_GetError"), "CLM_GetError 获取错误信息失败 | CLM_GetError error retrieval failed"); + return CreateFailureResult("CLM_GetError 获取错误信息失败 | CLM_GetError error retrieval failed"); + } + else + { + _logger.Info("CLM_GetError 成功: {Error} | CLM_GetError success: {Error}", error.ToString()); + } + + // 步骤 7:检查模块授权(核心,必须存在)| Step 7: Check module authorization (core, must exist) + ushort moduleId = _config.ModuleId; + ushort type = 0; + if (!NativeMethods.CLM_ModuleIsLicensed(ref moduleId, ref type)) + { + _logger.Error(new InvalidOperationException("CLM_ModuleIsLicensed"), "模块号码{ModuleId}不可用 | Module {ModuleId} unavailable", moduleId); + return CreateFailureResult($"模块号码{moduleId}不可用 | Module {moduleId} unavailable"); + } + _logger.Info("模块号码{ModuleId}有效 | Module {ModuleId} available", moduleId); + + // 步骤 8:获取授权到期日期(核心,必须存在)| Step 8: Get warranty expiration date (core, must exist) + int month = 0, day = 0, year = 0; + if (!NativeMethods.CLM_GetWarrantyExpiration(ref month, ref day, ref year)) + { + _logger.Error(new InvalidOperationException("CLM_GetWarrantyExpiration"), "获取授权到期日期失败 | Failed to get warranty expiration date"); + return CreateFailureResult("获取授权到期日期失败 | Failed to get warranty expiration date"); + } + + _expirationDate = new DateTime(year, month, day); + _logger.Info("CLM_GetWarrantyExpiration 成功: {Year}/{Month}/{Day} | CLM_GetWarrantyExpiration success: {Year}/{Month}/{Day}", year, month, day); + + // 检查是否在30天内到期 | Check if expiring within 30 days + string warningMessage = string.Empty; + TimeSpan timeToExpiry = _expirationDate.Value - DateTime.Now; + if (timeToExpiry.Days <= 30) + { + warningMessage = $"软件授权将于{year}年{month}月{day}日到期,请尽快联系海克斯康 | Software license will expire on {year}-{month}-{day}, please contact Hexagon"; + _logger.Warn(warningMessage); + } + + // 授权成功 | Authorization successful + IsAuthorized = true; + WriteLicenseStateToConfig(LicenseState.Success); + + string successMessage = string.IsNullOrEmpty(warningMessage) + ? "授权检查成功 | Authorization check successful" + : $"授权检查成功(警告:{warningMessage})| Authorization check successful (Warning: {warningMessage})"; + + _logger.Info("授权检查完成 | Authorization check completed: Mode={Mode}, State={State}, Expiration={Expiration}", + (int)LicenseMode, + (int)LicenseState.Success, + _expirationDate?.ToString("yyyy-MM-dd") ?? "N/A"); + + return new LicenseCheckResult( + isAuthorized: true, + message: successMessage, + licenseMode: LicenseMode, + moduleId: _config.ModuleId, + expirationDate: _expirationDate, + smaDate: _smaDate, + floatingLicenseIp: _floatingLicenseIp, + floatingLicensePort: _floatingLicensePort); + } + catch (DllNotFoundException ex) + { + _logger.Error(ex, "MORCODE.dll 加载失败 | Failed to load MORCODE.dll"); + return CreateFailureResult("CLMS SDK 不可用 | CLMS SDK unavailable"); + } + } + + /// + /// 尝试调用可选的 SDK 方法,兼容老版本 SDK 中不存在的入口点 | + /// Try to invoke an optional SDK method, compatible with missing entry points in older SDK versions + /// + /// 要调用的方法委托 | Method delegate to invoke + /// 方法名称(用于日志)| Method name (for logging) + /// 方法返回值,入口点不存在时为 default | Method return value, default if entry point not found + /// true: 入口点存在并已调用; false: 入口点不存在(EntryPointNotFoundException)| true: entry point exists and was invoked; false: entry point not found + private bool TryInvokeOptional(Func action, string methodName, out bool result) + { + try + { + result = action(); + return true; + } + catch (EntryPointNotFoundException) + { + result = default; + return false; + } + } + + /// + /// 验证 SMA | Validate SMA + /// 兼容老版本 SDK:CLM_GetSmaDate 入口点不存在时跳过 SMA 验证 | + /// Compatible with old SDK: skips SMA validation if CLM_GetSmaDate entry point not found + /// + /// 失败时返回失败结果,成功或跳过时返回 null | Returns failure result on failure, null on success or skip + private LicenseCheckResult? ValidateSma() + { + int yearSma = 0, monthSma = 0, daySma = 0; + + // CLM_GetSmaDate 在老版本 SDK 中可能不存在 | CLM_GetSmaDate may not exist in older SDK + try + { + if (!NativeMethods.CLM_GetSmaDate(ref monthSma, ref daySma, ref yearSma)) + { + _logger.Error(new InvalidOperationException("CLM_GetSmaDate"), "检查SMA失败 | SMA check failed"); + return CreateFailureResult("检查SMA失败 | SMA check failed"); + } + } + catch (EntryPointNotFoundException) + { + _logger.Warn("CLM_GetSmaDate 入口点不存在,跳过SMA验证(SDK版本较旧)| CLM_GetSmaDate entry point not found, skipping SMA validation (older SDK version)"); + return null; + } + + _logger.Info("CLM_GetSmaDate 成功: {Year}/{Month}/{Day} | CLM_GetSmaDate success: {Year}/{Month}/{Day}", yearSma, monthSma, daySma); + + // 获取软件版本信息 | Get software version information + var version = Assembly.GetExecutingAssembly().GetName().Version; + int major = version?.Major ?? 0; + int minor = version?.Minor ?? 0; + + // SMA 年份 < 软件主版本号 → 失败 | SMA year < software major version → failure + if (yearSma < major) + { + string msg = $"CLMS授权中SMA年份{yearSma}小于软件主版本号(年份){major},请联系海克斯康升级许可 | SMA year {yearSma} is less than software major version {major}, please contact Hexagon to upgrade license"; + _logger.Error(new InvalidOperationException("SMA验证失败"), msg); + return CreateFailureResult(msg); + } + + // SMA 年份 == 软件主版本号时,校验季度 | When SMA year == software major version, validate quarter + if (yearSma == major) + { + try + { + DateTime smaDate = new DateTime(yearSma, monthSma, daySma); + int smaQuarter = (smaDate.Month - 1) / 3 + 1; + + if (minor > smaQuarter) + { + string msg = $"CLMS授权日期{yearSma}/{monthSma}/{daySma}属于{yearSma}年第{smaQuarter}季度,不支持当前{major}年第{minor}季度的软件版本 | SMA date {yearSma}/{monthSma}/{daySma} is in Q{smaQuarter} of {yearSma}, does not support current Q{minor} of {major} software version"; + _logger.Error(new InvalidOperationException("SMA季度验证失败"), msg); + return CreateFailureResult(msg); + } + } + catch (Exception ex) + { + string msg = $"SMA授权日期{yearSma}/{monthSma}/{daySma}不合法 | SMA date {yearSma}/{monthSma}/{daySma} is invalid: {ex.Message}"; + _logger.Error(ex, msg); + return CreateFailureResult(msg); + } + } + + _smaDate = new DateTime(yearSma, monthSma, daySma); + _logger.Info("SMA校验成功,SMA有效期至{Year}/{Month}/{Day} | SMA validation successful, valid until {Year}/{Month}/{Day}", yearSma, monthSma, daySma); + return null; + } + + /// + /// 创建失败结果 | Create failure result + /// + /// 失败消息 | Failure message + /// 授权检查失败结果 | License check failure result + private LicenseCheckResult CreateFailureResult(string message) + { + IsAuthorized = false; + WriteLicenseStateToConfig(LicenseState.Fail); + + _logger.Info("授权检查完成 | Authorization check completed: Mode={Mode}, State={State}, Expiration={Expiration}", + (int)LicenseMode, + (int)LicenseState.Fail, + "N/A"); + + return new LicenseCheckResult( + isAuthorized: false, + message: message, + licenseMode: LicenseMode, + moduleId: _config.ModuleId, + expirationDate: null, + smaDate: _smaDate, + floatingLicenseIp: _floatingLicenseIp, + floatingLicensePort: _floatingLicensePort); + } + + /// + /// 写入授权状态到配置文件 | Write license state to configuration file + /// + /// 授权状态 | License state + private void WriteLicenseStateToConfig(LicenseState state) + { + try + { + var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); + var settings = config.AppSettings.Settings; + + if (settings["License:LicenseState"] == null) + { + settings.Add("License:LicenseState", ((int)state).ToString()); + } + else + { + settings["License:LicenseState"].Value = ((int)state).ToString(); + } + + config.Save(ConfigurationSaveMode.Modified); + ConfigurationManager.RefreshSection("appSettings"); + + _logger.Info("授权状态已写入配置: {State} | License state written to config: {State}", (int)state); + } + catch (Exception ex) + { + _logger.Error(ex, "写入授权状态到配置失败 | Failed to write license state to config"); + } + } + } +} diff --git a/XP.Common/License/Interfaces/ILicenseService.cs b/XP.Common/License/Interfaces/ILicenseService.cs new file mode 100644 index 0000000..50d1649 --- /dev/null +++ b/XP.Common/License/Interfaces/ILicenseService.cs @@ -0,0 +1,67 @@ +using System; +using XP.Common.License.Enums; +using XP.Common.License.Implementations; + +namespace XP.Common.License.Interfaces; + +/// +/// 授权服务接口 | License service interface +/// +public interface ILicenseService +{ + /// + /// 执行授权检查 | Perform authorization check + /// + /// 授权检查结果 | License check result + LicenseCheckResult CheckAuthorization(); + + /// + /// 当前会话是否已授权 | Whether the current session is authorized + /// + bool IsAuthorized { get; } + + /// + /// 获取授权到期日期 | Get license expiration date + /// + /// 授权到期日期,未授权时返回 null | License expiration date, null if not authorized + DateTime? GetExpirationDate(); + + /// + /// 检查模块是否授权 | Check if module is licensed + /// + /// 模块ID | Module ID + /// 模块是否授权 | Whether the module is licensed + bool IsModuleLicensed(ushort moduleId); + + /// + /// 获取SMA到期日期 | Get SMA expiration date + /// + /// SMA到期日期,未启用时返回 null | SMA expiration date, null if not enabled + DateTime? GetSmaDate(); + + /// + /// 当前授权模式 | Current license mode + /// + LicenseMode LicenseMode { get; } + + /// + /// 临时测试模式超时事件(到期时触发,应用应执行正常关闭流程)| Temporary test mode timeout event (fires when expired, app should perform graceful shutdown) + /// + event EventHandler TestModeTimeout; + + /// + /// 临时测试模式剩余5分钟警告事件 | Temporary test mode 5-minute warning event + /// + event EventHandler TestModeWarning5Min; + + /// + /// 临时测试模式剩余1分钟警告事件 | Temporary test mode 1-minute warning event + /// + event EventHandler TestModeWarning1Min; + + /// + /// 获取临时测试模式剩余时间 | Get remaining time in temporary test mode + /// + /// 剩余时间(秒),非测试模式返回 0 | Remaining time in seconds, 0 if not in test mode + int GetRemainingTestTime(); +} diff --git a/XP.Common/License/Native/NativeMethods.cs b/XP.Common/License/Native/NativeMethods.cs new file mode 100644 index 0000000..4ad22c4 --- /dev/null +++ b/XP.Common/License/Native/NativeMethods.cs @@ -0,0 +1,97 @@ +using System; +using System.Runtime.InteropServices; +using System.Text; +using XP.Common.License.Enums; + +namespace XP.Common.License.Native +{ + /// + /// CLMS SDK 原生方法封装 | CLMS SDK native methods encapsulation + /// + internal static class NativeMethods + { + /// + /// 登录验证 | Login verification + /// + /// 验证字符串 | Verification string + /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure + [DllImport("MORCODE.dll", EntryPoint = "CLM_Login", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + internal static extern bool CLM_Login(StringBuilder str); + + /// + /// 退出登录 | Logout + /// + /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure + [DllImport("MORCODE.dll", EntryPoint = "CLM_Logout", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool CLM_Logout(); + + /// + /// 检查许可范围 | Check license scope + /// + /// TRUE: 有许可 | TRUE: Has license; FALSE: 无许可 | FALSE: No license + [DllImport("MORCODE.dll", EntryPoint = "CLM_Login_Scope", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool CLM_Login_Scope(); + + /// + /// 检查模块是否授权 | Check if module is licensed + /// + /// 模块ID | Module ID + /// 类型(暂无定义)| Type (undefined) + /// TRUE: 模块可用 | TRUE: Module available; FALSE: 模块不可用 | FALSE: Module unavailable + [DllImport("MORCODE.dll", EntryPoint = "CLM_ModuleIsLicensed", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool CLM_ModuleIsLicensed(ref ushort mod, ref ushort type); + + /// + /// 获取保修到期日期 | Get warranty expiration date + /// + /// 月份 | Month + /// 日期 | Day + /// 年份 | Year + /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure + [DllImport("MORCODE.dll", EntryPoint = "CLM_GetWarrantyExpiration", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool CLM_GetWarrantyExpiration(ref int mon, ref int day, ref int year); + + /// + /// 获取浮动许可的IP地址和端口 | Get floating license IP and port + /// + /// IP地址 | IP address + /// 端口 | Port + /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure + [DllImport("MORCODE.dll", EntryPoint = "CLM_GetIP", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + internal static extern bool CLM_GetIP(StringBuilder ip, StringBuilder port); + + /// + /// 获取错误信息 | Get error message + /// + /// 错误信息 | Error message + /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure + [DllImport("MORCODE.dll", EntryPoint = "CLM_GetError", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + internal static extern bool CLM_GetError(StringBuilder error); + + /// + /// 检查系统时间 | Check system time + /// + /// TRUE: 系统时间正常 | TRUE: System time normal; FALSE: 系统时间异常 | FALSE: System time anomaly + [DllImport("MORCODE.dll", EntryPoint = "CLM_CheckSystemTime", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool CLM_CheckSystemTime(); + + /// + /// 获取SmartService信息 | Get SmartService information + /// + /// 控制器ID | Controller ID + /// 用户名 | User name + /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure + [DllImport("MORCODE.dll", EntryPoint = "CLM_SmartService", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + internal static extern bool CLM_SmartService(StringBuilder ControllerId, StringBuilder UserName); + + /// + /// 获取SMA日期 | Get SMA date + /// + /// 月份 | Month + /// 日期 | Day + /// 年份 | Year + /// TRUE: 成功 | TRUE: Success; FALSE: 失败 | FALSE: Failure + [DllImport("MORCODE.dll", EntryPoint = "CLM_GetSmaDate", CallingConvention = CallingConvention.Cdecl)] + internal static extern bool CLM_GetSmaDate(ref int mon, ref int day, ref int year); + } +} \ No newline at end of file diff --git a/XP.Common/Logging/Configs/ConfigLoader.cs b/XP.Common/Logging/Configs/ConfigLoader.cs new file mode 100644 index 0000000..a35442b --- /dev/null +++ b/XP.Common/Logging/Configs/ConfigLoader.cs @@ -0,0 +1,50 @@ +using System.Configuration; + +namespace XP.Common.Logging.Configs +{ + /// + /// Serilog 配置加载器,从 App.config 读取日志相关配置项 | Serilog configuration loader, reads logging-related configuration from App.config + /// + public static class ConfigLoader + { + /// + /// 配置键前缀 | Configuration key prefix + /// + private const string KeyPrefix = "Serilog:"; + + /// + /// 从 App.config 加载 Serilog 配置 | Load Serilog configuration from App.config + /// + /// Serilog 配置实体,缺失或无效配置项使用默认值 | Serilog configuration entity, uses default values for missing or invalid items + public static SerilogConfig LoadSerilogConfig() + { + var config = new SerilogConfig(); + + // 加载日志路径 | Load log path + var logPath = ConfigurationManager.AppSettings[KeyPrefix + "LogPath"]; + if (!string.IsNullOrEmpty(logPath)) config.LogPath = logPath; + + // 加载最低日志级别 | Load minimum level + var minLevel = ConfigurationManager.AppSettings[KeyPrefix + "MinimumLevel"]; + if (!string.IsNullOrEmpty(minLevel)) config.MinimumLevel = minLevel; + + // 加载是否输出到控制台 | Load enable console + var enableConsole = ConfigurationManager.AppSettings[KeyPrefix + "EnableConsole"]; + if (bool.TryParse(enableConsole, out var console)) config.EnableConsole = console; + + // 加载日志文件分割规则 | Load rolling interval + var rollingInterval = ConfigurationManager.AppSettings[KeyPrefix + "RollingInterval"]; + if (!string.IsNullOrEmpty(rollingInterval)) config.RollingInterval = rollingInterval; + + // 加载单个日志文件最大大小 | Load file size limit + var fileSize = ConfigurationManager.AppSettings[KeyPrefix + "FileSizeLimitMB"]; + if (long.TryParse(fileSize, out var size) && size > 0) config.FileSizeLimitMB = size; + + // 加载保留日志文件数量 | Load retained file count limit + var retainCount = ConfigurationManager.AppSettings[KeyPrefix + "RetainedFileCountLimit"]; + if (int.TryParse(retainCount, out var count) && count > 0) config.RetainedFileCountLimit = count; + + return config; + } + } +} diff --git a/XP.Common/Configs/SerilogConfig.cs b/XP.Common/Logging/Configs/SerilogConfig.cs similarity index 60% rename from XP.Common/Configs/SerilogConfig.cs rename to XP.Common/Logging/Configs/SerilogConfig.cs index ddc3fd6..af8c4e8 100644 --- a/XP.Common/Configs/SerilogConfig.cs +++ b/XP.Common/Logging/Configs/SerilogConfig.cs @@ -1,43 +1,43 @@ using System; using System.IO; -namespace XP.Common.Configs +namespace XP.Common.Logging.Configs { /// - /// Serilog日志配置实体(从App.config读取) + /// Serilog 日志配置实体(从 App.config 读取)| Serilog logging configuration entity (loaded from App.config) /// public class SerilogConfig { /// - /// 日志输出根路径(默认:AppData/Files/Logs) + /// 日志输出根路径(默认:AppData/Files/Logs)| Log output root path (default: AppData/Files/Logs) /// public string LogPath { get; set; } = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Files", "Logs"); /// - /// 最低日志级别(Debug/Info/Warn/Error/Fatal) + /// 最低日志级别(Debug/Info/Warn/Error/Fatal)| Minimum log level /// public string MinimumLevel { get; set; } = "Info"; /// - /// 是否输出到控制台(调试环境=true,生产环境=false) + /// 是否输出到控制台(调试环境=true,生产环境=false)| Whether to output to console /// public bool EnableConsole { get; set; } = true; /// - /// 日志文件分割规则(Day/Month/Hour/Size) + /// 日志文件分割规则(Day/Month/Hour/Size)| Log file rolling interval /// public string RollingInterval { get; set; } = "Day"; /// - /// 单个日志文件最大大小(MB,仅Size分割时生效) + /// 单个日志文件最大大小(MB,仅 Size 分割时生效)| Single log file max size (MB) /// public long FileSizeLimitMB { get; set; } = 100; /// - /// 保留日志文件数量(默认30天) + /// 保留日志文件数量(默认30天)| Retained file count limit (default 30) /// public int RetainedFileCountLimit { get; set; } = 30; } -} \ No newline at end of file +} diff --git a/XP.Common/Logging/SerilogInitializer.cs b/XP.Common/Logging/SerilogInitializer.cs index 9fd141a..dd322d3 100644 --- a/XP.Common/Logging/SerilogInitializer.cs +++ b/XP.Common/Logging/SerilogInitializer.cs @@ -1,7 +1,7 @@ using System; using Serilog; using Serilog.Events; -using XP.Common.Configs; +using XP.Common.Logging.Configs; using XP.Common.Logging.ViewModels; namespace XP.Common.Logging diff --git a/XP.Common/Module/CommonModule.cs b/XP.Common/Module/CommonModule.cs index e15672d..e7b18f7 100644 --- a/XP.Common/Module/CommonModule.cs +++ b/XP.Common/Module/CommonModule.cs @@ -4,7 +4,8 @@ using Prism.Modularity; using XP.Common.Dump.Configs; using XP.Common.Dump.Implementations; using XP.Common.Dump.Interfaces; -using XP.Common.Helpers; +using XP.Common.License.Configs; +using XP.Common.License.Interfaces; using XP.Common.Localization.Configs; using XP.Common.Localization.Extensions; using XP.Common.Localization.Implementations; @@ -12,6 +13,8 @@ using XP.Common.Localization.Interfaces; using XP.Common.Logging.Interfaces; using XP.Common.PdfViewer.Implementations; using XP.Common.PdfViewer.Interfaces; +using DumpConfigLoader = XP.Common.Dump.Configs.ConfigLoader; +using LicenseConfigLoader = XP.Common.License.Configs.ConfigLoader; namespace XP.Common.Module { @@ -65,7 +68,7 @@ namespace XP.Common.Module containerRegistry.RegisterSingleton(); // 注册 Dump 配置为单例(通过工厂方法加载)| Register Dump config as singleton (via factory method) - containerRegistry.RegisterSingleton(() => ConfigLoader.LoadDumpConfig()); + containerRegistry.RegisterSingleton(() => DumpConfigLoader.LoadDumpConfig()); // 注册 Dump 服务为单例 | Register Dump service as singleton containerRegistry.RegisterSingleton(); @@ -75,6 +78,12 @@ namespace XP.Common.Module // 注册 PDF 查看服务为单例 | Register PDF viewer service as singleton containerRegistry.RegisterSingleton(); + + // 注册授权配置为单例(通过工厂方法加载)| Register license config as singleton (via factory method) + containerRegistry.RegisterSingleton(() => LicenseConfigLoader.LoadLicenseConfig()); + + // 注册授权服务为单例 | Register license service as singleton + containerRegistry.RegisterSingleton(); } } } \ No newline at end of file diff --git a/XP.Common/ReleaseFiles/MORCODE.dll b/XP.Common/ReleaseFiles/MORCODE.dll new file mode 100644 index 0000000..d2a4075 Binary files /dev/null and b/XP.Common/ReleaseFiles/MORCODE.dll differ diff --git a/XP.Common/XP.Common.csproj b/XP.Common/XP.Common.csproj index 50c0aa6..90e15ca 100644 --- a/XP.Common/XP.Common.csproj +++ b/XP.Common/XP.Common.csproj @@ -62,4 +62,7 @@ Resources.resx + + + \ No newline at end of file diff --git a/XP.Hardware.PLC.Sentry/App.xaml.cs b/XP.Hardware.PLC.Sentry/App.xaml.cs index 7cc5f17..8f99954 100644 --- a/XP.Hardware.PLC.Sentry/App.xaml.cs +++ b/XP.Hardware.PLC.Sentry/App.xaml.cs @@ -5,7 +5,7 @@ using Serilog; using System; using System.Resources; using System.Windows; -using XP.Common.Configs; +using XP.Common.Logging.Configs; using XP.Common.Localization; using XP.Common.Localization.Interfaces; using XP.Common.Logging; @@ -118,7 +118,7 @@ namespace XP.Hardware.PLC.Sentry }; // 加载并初始化 Serilog | Load and initialize Serilog - SerilogConfig serilogConfig = XP.Common.Helpers.ConfigLoader.LoadSerilogConfig(); + SerilogConfig serilogConfig = XP.Common.Logging.Configs.ConfigLoader.LoadSerilogConfig(); SerilogInitializer.Initialize(serilogConfig); _logger.Information("PLC Sentry Monitor 启动开始 | PLC Sentry Monitor startup started"); diff --git a/XP.Scan/App.xaml.cs b/XP.Scan/App.xaml.cs index 8b122d6..72482fd 100644 --- a/XP.Scan/App.xaml.cs +++ b/XP.Scan/App.xaml.cs @@ -2,11 +2,11 @@ using System; using System.Windows; using Prism.Container.DryIoc; using Prism.Ioc; -using XP.Common.Configs; using XP.Common.Dump.Configs; using XP.Common.Dump.Implementations; using XP.Common.Dump.Interfaces; -using XP.Common.Helpers; +using XP.Common.Logging.Configs; +using DumpConfigLoader = XP.Common.Dump.Configs.ConfigLoader; using XP.Common.Localization.Configs; using XP.Common.Localization.Extensions; using XP.Common.Localization; @@ -71,7 +71,7 @@ namespace XP.Scan containerRegistry.RegisterSingleton(); // Dump 服务 - containerRegistry.RegisterSingleton(() => ConfigLoader.LoadDumpConfig()); + containerRegistry.RegisterSingleton(() => DumpConfigLoader.LoadDumpConfig()); containerRegistry.RegisterSingleton(); // 注册 XPScanView 用于区域导航 diff --git a/XplorePlane.Tests/Services/InspectionResultStoreTests.cs b/XplorePlane.Tests/Services/InspectionResultStoreTests.cs index 21ffa5e..c758244 100644 --- a/XplorePlane.Tests/Services/InspectionResultStoreTests.cs +++ b/XplorePlane.Tests/Services/InspectionResultStoreTests.cs @@ -5,7 +5,7 @@ using System.IO; using System.Linq; using System.Text.Json; using System.Threading.Tasks; -using XP.Common.Configs; +using XP.Common.Database.Configs; using XP.Common.Database.Implementations; using XP.Common.Database.Interfaces; using XP.Common.Logging.Interfaces; diff --git a/XplorePlane/App.config b/XplorePlane/App.config index 3428b03..9501f95 100644 --- a/XplorePlane/App.config +++ b/XplorePlane/App.config @@ -11,6 +11,11 @@ + + + + + diff --git a/XplorePlane/App.xaml.cs b/XplorePlane/App.xaml.cs index 0d0b6d7..e8505ef 100644 --- a/XplorePlane/App.xaml.cs +++ b/XplorePlane/App.xaml.cs @@ -10,14 +10,18 @@ using System.Threading; using System.Windows; using Telerik.Windows.Controls; using XP.Camera; -using XP.Common.Configs; +using XP.Common.Database.Configs; using XP.Common.Database.Implementations; using XP.Common.Database.Interfaces; using XP.Common.Dump.Configs; using XP.Common.Dump.Implementations; using XP.Common.Dump.Interfaces; using XP.Common.GeneralForm.Views; -using XP.Common.Helpers; +using XP.Common.Logging.Configs; +using DumpConfigLoader = XP.Common.Dump.Configs.ConfigLoader; +using LoggingConfigLoader = XP.Common.Logging.Configs.ConfigLoader; +using DatabaseConfigLoader = XP.Common.Database.Configs.ConfigLoader; +using XP.Common.License.Interfaces; using XP.Common.Localization.Configs; using XP.Common.Localization.Extensions; using XP.Common.Localization.Implementations; @@ -65,7 +69,7 @@ namespace XplorePlane { protected override void OnStartup(StartupEventArgs e) { - // 设置 Telerik Windows11 主题,缩小 Ribbon 整体尺寸 + // 设置 Telerik Windows11 主题,缩尝 Ribbon 整体尺寸 StyleManager.ApplicationTheme = new Windows11Theme(); // 强制使用中文 UI,确保 ImageProcessing 库显示中文 @@ -75,10 +79,10 @@ namespace XplorePlane CultureInfo.DefaultThreadCurrentCulture = zhCN; CultureInfo.DefaultThreadCurrentUICulture = zhCN; - // 配置 Serilog 日志系统 + // 酝置 Serilog 日志系统 ConfigureLogging(); - // 捕获未处理的异常 + // 杕获未处睆的异常 AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; DispatcherUnhandledException += OnDispatcherUnhandledException; @@ -114,24 +118,24 @@ namespace XplorePlane private void ConfigureLogging() { - // 加载 Serilog 配置 | Load Serilog configuration - SerilogConfig serilogConfig = ConfigLoader.LoadSerilogConfig(); + // 加载 Serilog 酝置 | Load Serilog configuration + SerilogConfig serilogConfig = LoggingConfigLoader.LoadSerilogConfig(); // 初始化 Serilog(全局唯一)| Initialize Serilog (global singleton) SerilogInitializer.Initialize(serilogConfig); - // 记录应用启动日志 | Log application startup + // 记录应用坯动日志 | Log application startup Log.Information("========================================"); - Log.Information("XplorePlane 应用程序启动"); + Log.Information("XplorePlane 应用程庝坯动"); Log.Information("========================================"); } protected override void OnExit(ExitEventArgs e) { Log.Information("========================================"); - Log.Information("XplorePlane 应用程序退出"); + Log.Information("XplorePlane 应用程庝退出"); Log.Information("========================================"); - // 释放全局状态服务资源 + // 释放全局状思朝务资溝 try { var bootstrapper = AppBootstrapper.Instance; @@ -139,15 +143,15 @@ namespace XplorePlane { var appStateService = bootstrapper.Container.Resolve(); appStateService?.Dispose(); - Log.Information("全局状态服务资源已释放"); + Log.Information("全局状思朝务资溝已释放"); } } catch (Exception ex) { - Log.Error(ex, "全局状态服务资源释放失败"); + Log.Error(ex, "全局状思朝务资溝释放失败"); } - // 释放射线源资源 + // 释放射线溝资溝 try { var bootstrapper = AppBootstrapper.Instance; @@ -155,15 +159,15 @@ namespace XplorePlane { var raySourceService = bootstrapper.Container.Resolve(); raySourceService?.Dispose(); - Log.Information("射线源资源已释放"); + Log.Information("射线溝资溝已释放"); } } catch (Exception ex) { - Log.Error(ex, "射线源资源释放失败"); + Log.Error(ex, "射线溝资溝释放失败"); } - // 先停止导航相机实时采集,再释放资源,避免回调死锁 + // 先坜止导航相机实时采集,冝释放资溝,靿兝回调死锝 try { var bootstrapper = AppBootstrapper.Instance; @@ -179,7 +183,7 @@ namespace XplorePlane Log.Error(ex, "导航相机 ViewModel 释放失败"); } - // 释放导航相机服务资源 + // 释放导航相机朝务资溝 try { var bootstrapper = AppBootstrapper.Instance; @@ -187,15 +191,15 @@ namespace XplorePlane { var cameraService = bootstrapper.Container.Resolve(); cameraService?.Dispose(); - Log.Information("导航相机服务资源已释放"); + Log.Information("导航相机朝务资溝已释放"); } } catch (Exception ex) { - Log.Error(ex, "导航相机服务资源释放失败"); + Log.Error(ex, "导航相机朝务资溝释放失败"); } - // 释放主界面探测器帧流水线资源 + // 释放主界面探测器帧浝水线资溝 try { var bootstrapper = AppBootstrapper.Instance; @@ -203,31 +207,31 @@ namespace XplorePlane { var detectorFramePipelineService = bootstrapper.Container.Resolve(); detectorFramePipelineService?.Dispose(); - Log.Information("主界面探测器帧流水线资源已释放"); + Log.Information("主界面探测器帧浝水线资溝已释放"); } } catch (Exception ex) { - Log.Error(ex, "主界面探测器帧流水线资源释放失败"); + Log.Error(ex, "主界面探测器帧浝水线资溝释放失败"); } - // 释放SQLite数据库资源 | Release SQLite database resources + // 释放SQLite数杮库资溝 | Release SQLite database resources try { var bootstrapper = AppBootstrapper.Instance; if (bootstrapper != null) { - var dbContext = bootstrapper.Container.Resolve(); // 从 Prism 容器获取 IDbContext 实例(单例)| Get IDbContext instance from Prism container (singleton) + var dbContext = bootstrapper.Container.Resolve(); // 从 Prism 容器获坖 IDbContext 实例(坕例)| Get IDbContext instance from Prism container (singleton) dbContext?.Dispose(); - Log.Information("数据库资源已成功释放 | Database resources released successfully"); + Log.Information("数杮库资溝已戝功释放 | Database resources released successfully"); } } catch (Exception ex) { - Log.Error(ex, "数据库资源释放失败,忽略该错误继续退出 | Database resource release failed, ignoring error and continuing exit"); + Log.Error(ex, "数杮库资溝释放失败,忽略该错误继续退出 | Database resource release failed, ignoring error and continuing exit"); } - // 释放 PLC 资源 + // 释放 PLC 资溝 try { var bootstrapper = AppBootstrapper.Instance; @@ -235,15 +239,15 @@ namespace XplorePlane { var plcService = bootstrapper.Container.Resolve(); plcService?.Dispose(); - Log.Information("PLC 资源已释放"); + Log.Information("PLC 资溝已释放"); } } catch (Exception ex) { - Log.Error(ex, "PLC 资源释放失败"); + Log.Error(ex, "PLC 资溝释放失败"); } - // 释放探测器资源 + // 释放探测器资溝 try { var bootstrapper = AppBootstrapper.Instance; @@ -251,15 +255,15 @@ namespace XplorePlane { var detectorService = bootstrapper.Container.Resolve(); detectorService?.Dispose(); - Log.Information("探测器资源已释放"); + Log.Information("探测器资溝已释放"); } } catch (Exception ex) { - Log.Error(ex, "探测器资源释放失败"); + Log.Error(ex, "探测器资溝释放失败"); } - // 释放录制服务资源 + // 释放录制朝务资溝 try { var bootstrapper = AppBootstrapper.Instance; @@ -267,24 +271,24 @@ namespace XplorePlane { var recordingService = bootstrapper.Container.Resolve(); recordingService?.Dispose(); - Log.Information("录制服务资源已释放"); + Log.Information("录制朝务资溝已释放"); } } catch (Exception ex) { - Log.Error(ex, "录制服务资源释放失败"); + Log.Error(ex, "录制朝务资溝释放失败"); } Log.CloseAndFlush(); base.OnExit(e); } /// - /// 处理未捕获的异常 + /// 处睆未杕获的异常 /// private void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) { var exception = e.ExceptionObject as Exception; - Log.Fatal(exception, "应用程序发生未处理的异常"); + Log.Fatal(exception, "应用程庝坑生未处睆的异常"); MessageBox.Show( $"A fatal error has occurred:\n\n{exception?.Message}\n\nPlease check the log file for details.", @@ -294,11 +298,11 @@ namespace XplorePlane } /// - /// 处理 UI 线程未捕获的异常 + /// 处睆 UI 线程未杕获的异常 /// private void OnDispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { - Log.Error(e.Exception, "UI 线程发生未处理的异常"); + Log.Error(e.Exception, "UI 线程坑生未处睆的异常"); MessageBox.Show( $"An error has occurred:\n\n{e.Exception.Message}\n\nPlease check the log file for details.", @@ -306,7 +310,7 @@ namespace XplorePlane MessageBoxButton.OK, MessageBoxImage.Error); - // 标记为已处理,防止应用程序崩溃 + // 标记为已处睆,防止应用程庝崩溃 e.Handled = true; } } @@ -328,35 +332,42 @@ namespace XplorePlane protected override Window CreateShell() { - // 提前初始化模块,确保硬件服务在 MainWindow XAML 解析前已注册 + // 杝剝初始化模块,确保硬件朝务在 MainWindow XAML 解枝剝已注册 if (!_modulesInitialized) { base.InitializeModules(); _modulesInitialized = true; } + // 执行授权检查 | Perform license authorization check + if (!PerformLicenseCheck()) + { + Application.Current.Shutdown(); + return null; + } + var shell = Container.Resolve(); - // 主窗口加载完成后再连接相机,确保所有模块和原生 DLL 已完成初始化 + // 主窗坣加载完戝坎冝连接相机,确保所有模块和原生 DLL 已完戝初始化 shell.Loaded += async (s, e) => { - // [DEV] 导航相机连接已屏蔽,开发阶段跳过以加快启动速度 + // [DEV] 导航相机连接已屝蔽,开坑阶段跳过以加快坯动速度 // TryConnectCamera(); - // 初始化主界面探测器帧流水线,开始接收探测器图像事件 + // 初始化主界面探测器帧浝水线,开始接收探测器图僝事件 try { _ = Container.Resolve(); } catch (Exception ex) { - Log.Error(ex, "初始化主界面探测器帧流水线失败"); + Log.Error(ex, "初始化主界面探测器帧浝水线失败"); } - // 若配置为模拟探测器,自动初始化并启动采集(无需用户手动操作) + // 若酝置为模拟探测器,自动初始化并坯动采集(无需用户手动擝作) await TryAutoStartSimulatedDetectorAsync(); - // [DEV] 相机状态通知已屏蔽 + // [DEV] 相机状思通知已屝蔽 // try // { // var cameraVm = Container.Resolve(); @@ -377,8 +388,9 @@ namespace XplorePlane } /// - /// 若 App.config 中 Detector:Type = Simulated,自动初始化并启动连续采集。 - /// 真实硬件类型不受影响。 +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< private async System.Threading.Tasks.Task TryAutoStartSimulatedDetectorAsync() { @@ -398,25 +410,123 @@ namespace XplorePlane Log.Error("SimulatedDetector 自动初始化失败:{Msg}", initResult.ErrorMessage); return; } - Log.Information("[SimulatedDetector] 初始化成功,启动连续采集..."); + Log.Information("[SimulatedDetector] 初始化戝功,坯动连续采集..."); var startResult = await detectorService.StartAcquisitionAsync(); if (!startResult.IsSuccess) { - Log.Error("SimulatedDetector 启动采集失败:{Msg}", startResult.ErrorMessage); + Log.Error("SimulatedDetector 坯动采集失败:{Msg}", startResult.ErrorMessage); return; } - Log.Information("[SimulatedDetector] 连续采集已启动,帧将以 5 fps 持续发布"); + Log.Information("[SimulatedDetector] 连续采集已坯动,帧将以 5 fps 挝续坑布"); } catch (Exception ex) { - Log.Error(ex, "SimulatedDetector 自动启动异常"); + Log.Error(ex, "SimulatedDetector 自动坯动异常"); } } /// +====================================AUTO GENERATED BY CONFLICT EXTENSION==================================== + /// 执行授权检查,授权失败时显示错误消杯 | Perform license check, show error message on failure + /// + /// 授权是坦戝功 | Whether authorization succeeded + private bool PerformLicenseCheck() + { + try + { + var licenseService = Container.Resolve(); + var result = licenseService.CheckAuthorization(); + + if (!result.IsAuthorized) + { + Log.Error("授权检查失败 | Authorization check failed: {Message}", result.Message); + MessageBox.Show( + result.Message, + "授权失败 | Authorization Failed", + MessageBoxButton.OK, + MessageBoxImage.Error); + return false; + } + + // 临时测试模弝专属:订阅倒计时事件并杝示 | Temporary test mode only: subscribe countdown events and notify + if (licenseService.LicenseMode == XP.Common.License.Enums.LicenseMode.TemporaryTest) + { + licenseService.TestModeWarning5Min += OnTestModeWarning5Min; + licenseService.TestModeWarning1Min += OnTestModeWarning1Min; + licenseService.TestModeTimeout += OnTestModeTimeout; + + MessageBox.Show( + "当剝为临时测试模弝,软件将在15分钟坎自动关闭。\nCurrently in temporary test mode, the software will automatically shut down after 15 minutes.", + "临时测试模弝 | Temporary Test Mode", + MessageBoxButton.OK, + MessageBoxImage.Information); + } + + Log.Information("授权检查通过 | Authorization check passed, Mode={Mode}", licenseService.LicenseMode); + return true; + } + catch (Exception ex) + { + Log.Error(ex, "授权检查过程中坑生异常 | Exception during authorization check"); + MessageBox.Show( + $"授权检查异常 | Authorization check exception: {ex.Message}", + "授权失败 | Authorization Failed", + MessageBoxButton.OK, + MessageBoxImage.Error); + return false; + } + } + + /// + /// 处睆临时测试模弝剩余5分钟警告 | Handle temporary test mode 5-minute warning + /// + private void OnTestModeWarning5Min(object? sender, EventArgs e) + { + Application.Current.Dispatcher.Invoke(() => + { + Log.Warning("临时测试模弝剩余5分钟 | Temporary test mode: 5 minutes remaining"); + MessageBox.Show( + "临时测试模弝将在5分钟坎到期,请尽快保存您的工作。\nTemporary test mode will expire in 5 minutes, please save your work.", + "测试模弝杝醒 | Test Mode Reminder", + MessageBoxButton.OK, + MessageBoxImage.Information); + }); + } + + /// + /// 处睆临时测试模弝剩余1分钟警告 | Handle temporary test mode 1-minute warning + /// + private void OnTestModeWarning1Min(object? sender, EventArgs e) + { + Application.Current.Dispatcher.Invoke(() => + { + Log.Warning("临时测试模弝剩余1分钟 | Temporary test mode: 1 minute remaining"); + MessageBox.Show( + "临时测试模弝将在1分钟坎到期,软件坳将关闭,请立坳保存您的工作。\nTemporary test mode will expire in 1 minute, the software will shut down soon. Please save your work immediately.", + "测试模弝坳将到期 | Test Mode Expiring", + MessageBoxButton.OK, + MessageBoxImage.Warning); + }); + } + + /// + /// 处睆临时测试模弝超时事件(执行正常关闭浝程)| Handle temporary test mode timeout event (perform graceful shutdown) + /// + private void OnTestModeTimeout(object? sender, EventArgs e) + { + Application.Current.Dispatcher.Invoke(() => + { + Log.Warning("临时测试模弝已超时,执行正常关闭浝程 | Temporary test mode timed out, performing graceful shutdown"); + // 使用正常关闭浝程,确保资溝正确释放 | Use graceful shutdown to ensure proper resource release + Application.Current.MainWindow?.Close(); + }); + } + + /// +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>AUTO GENERATED BY CONFLICT EXTENSION>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Feature/TURBO-621-License /// 在主线程上检索并连接导航相机。 - /// pylon SDK 要求在主线程(STA)上操作,不能放到后台线程。 + /// pylon SDK 覝求在主线程(STA)上擝作,丝能放到坎坰线程。 /// private void TryConnectCamera() { @@ -430,7 +540,7 @@ namespace XplorePlane catch (DeviceNotFoundException) { Log.Warning("未检测到导航相机"); - _cameraError = "未检测到导航相机,请检查连接后重启软件。"; + _cameraError = "未检测到导航相机,请检查连接坎針坯软件。"; } catch (Exception ex) { @@ -440,7 +550,7 @@ namespace XplorePlane } /// - /// 模块已在 CreateShell 中提前初始化,此处跳过避免重复加载 + /// 模块已在 CreateShell 中杝剝初始化,此处跳过靿兝針夝加载 /// protected override void InitializeModules() { @@ -456,7 +566,7 @@ namespace XplorePlane // 注册 Serilog 的 ILogger 实例 containerRegistry.RegisterInstance(Log.Logger); - // 注册 XP.Common.ILoggerService 适配器 + // 注册 XP.Common.ILoggerService 适酝器 containerRegistry.RegisterSingleton(); // 注册视图和视图模型 @@ -465,44 +575,44 @@ namespace XplorePlane containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); - // 注册图像处理服务与视图 + // 注册图僝处睆朝务与视图 containerRegistry.RegisterSingleton(); containerRegistry.Register(); - // 注册流水线服务(单例,共享 IImageProcessingService) + // 注册浝水线朝务(坕例,共享 IImageProcessingService) containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); - // 注册全局状态服务(单例) + // 注册全局状思朝务(坕例) containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.Register(); containerRegistry.Register(); - // 注册检测配方服务(单例) + // 注册检测酝方朝务(坕例) containerRegistry.RegisterSingleton(); - // 注册流水线 ViewModel(每次解析创建新实例) + // 注册浝水线 ViewModel(毝次解枝创建新实例) containerRegistry.Register(); containerRegistry.Register(); - // 注册硬件库的 ViewModel(供 ViewModelLocator 自动装配) + // 注册硬件库的 ViewModel(供 ViewModelLocator 自动装酝) containerRegistry.Register(); - // 注册 SQLite 配置和数据库上下文(FilamentLifetimeService 依赖) - var sqliteConfig = XP.Common.Helpers.ConfigLoader.LoadSqliteConfig(); + // 注册 SQLite 酝置和数杮库上下文(FilamentLifetimeService 依赖) + var sqliteConfig = DatabaseConfigLoader.LoadSqliteConfig(); containerRegistry.RegisterInstance(sqliteConfig); containerRegistry.RegisterSingleton(); - // 注册通用模块的服务(本地化、Dump) + // 注册通用模块的朝务(本地化〝Dump) containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); - containerRegistry.RegisterSingleton(() => XP.Common.Helpers.ConfigLoader.LoadDumpConfig()); + containerRegistry.RegisterSingleton(() => DumpConfigLoader.LoadDumpConfig()); containerRegistry.RegisterSingleton(); - // ── CNC / 矩阵编排 / 测量数据服务(单例)── + // ── CNC / 矩阵编排 / 测針数杮朝务(坕例)── containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); @@ -510,11 +620,11 @@ namespace XplorePlane containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); - // ── 主界面实时图像 / 探测器双队列服务(单例)── + // ── 主界面实时图僝 / 探测器坌队列朝务(坕例)── containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); - // ── CNC / 矩阵 ViewModel(瞬态)── + // ── CNC / 矩阵 ViewModel(瞬思)── containerRegistry.Register(); containerRegistry.Register(); containerRegistry.Register(); @@ -525,21 +635,21 @@ namespace XplorePlane containerRegistry.RegisterForNavigation(); containerRegistry.Register(); - // ── 导航相机服务(单例)── + // ── 导航相机朝务(坕例)── containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(() => new CameraFactory().CreateController("Basler")); containerRegistry.RegisterSingleton(); - // ── 录制服务(单例)── + // ── 录制朝务(坕例)── containerRegistry.RegisterSingleton(); - Log.Information("依赖注入容器配置完成"); + Log.Information("依赖注入容器酝置完戝"); } protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog) { - // 所有模块服务已在 RegisterTypes 中手动注册 + // 所有模块朝务已在 RegisterTypes 中手动注册 // CommonModule: ILocalizationService, IDumpService // RaySourceModule: IRaySourceService, IRaySourceFactory, IFilamentLifetimeService diff --git a/XplorePlane/XplorePlane.csproj b/XplorePlane/XplorePlane.csproj index 8859b84..d555a3f 100644 --- a/XplorePlane/XplorePlane.csproj +++ b/XplorePlane/XplorePlane.csproj @@ -62,7 +62,7 @@ ..\ExternalLibraries\Telerik ..\bin\ - x64 + AnyCPU