Merge branch 'master' of github.com:JamesNK/Newtonsoft.Json
Conflicts: Src/Newtonsoft.Json/JsonWriter.cs
This commit is contained in:
+4
-1
@@ -4,4 +4,7 @@
|
||||
TestResults/
|
||||
AppPackages/
|
||||
*.suo
|
||||
*.user
|
||||
*.user
|
||||
_ReSharper.*
|
||||
*.ReSharper.user
|
||||
*.resharper.user
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<topic id="ConditionalProperties" revisionNumber="1">
|
||||
<developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<introduction>
|
||||
<para>Json.NET has the ability to conditionally serialize properties by placing a ShouldSerialize method on a class.
|
||||
This funtionality is similar to the <externalLink>
|
||||
<linkText>XmlSerializer ShouldSerialize feature</linkText>
|
||||
<linkUri>http://msdn.microsoft.com/en-us/library/53b8022e.aspx</linkUri>
|
||||
<linkTarget>_blank</linkTarget>
|
||||
</externalLink>.</para>
|
||||
</introduction>
|
||||
<section>
|
||||
<title>ShouldSerialize</title>
|
||||
<content>
|
||||
<para>To conditionally serialize a property add a boolean method with the same name as the property and then prefixed the method name
|
||||
with ShouldSerialize. The result of the method determines whether the property is serialized. If the method returns true then the
|
||||
property will be serialized, if it returns false and the property will be skipped.</para>
|
||||
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\ConditionalPropertiesTests.cs" region="EmployeeShouldSerializeExample" title="Employee class with a ShouldSerialize method" />
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\ConditionalPropertiesTests.cs" region="ShouldSerializeClassTest" title="ShouldSerialize output" />
|
||||
|
||||
</content>
|
||||
</section>
|
||||
<section>
|
||||
<title>IContractResolver</title>
|
||||
<content>
|
||||
<para>ShouldSerialize can also be set using an <codeEntityReference>T:Newtonsoft.Json.Serialization.IContractResolver</codeEntityReference>.
|
||||
Conditionally serializing a property using an IContractResolver is useful if you don't want to place a ShouldSerialize method on a class
|
||||
or you didn't declare the class and are unable to.</para>
|
||||
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\ConditionalPropertiesTests.cs" region="ShouldSerializeContractResolver" title="Conditional properties with IContractResolver" />
|
||||
|
||||
</content>
|
||||
</section>
|
||||
<relatedTopics>
|
||||
<codeEntityReference>T:Newtonsoft.Json.JsonSerializer</codeEntityReference>
|
||||
<codeEntityReference>T:Newtonsoft.Json.Serialization.IContractResolver</codeEntityReference>
|
||||
<codeEntityReference>M:Newtonsoft.Json.Serialization.JsonProperty.ShouldSerialize</codeEntityReference>
|
||||
</relatedTopics>
|
||||
</developerConceptualDocument>
|
||||
</topic>
|
||||
+70
-53
@@ -1,54 +1,71 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<topic id="ContractResolver" revisionNumber="1">
|
||||
<developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!--
|
||||
<summary>
|
||||
<para>Optional summary abstract</para>
|
||||
</summary>
|
||||
-->
|
||||
<introduction>
|
||||
<para>The <codeEntityReference>T:Newtonsoft.Json.Serialization.IContractResolver</codeEntityReference>
|
||||
interface provides a way to customize how the
|
||||
JsonSerializer serializes and deserializes .NET objects to JSON.</para>
|
||||
<para>Implementing the IContractResolver interface and then assigning an
|
||||
instance to a JsonSerializer lets you control whether the object is
|
||||
serialized as a JSON object or JSON array, what object members should be
|
||||
serialized, how they are serialized and what they are called.</para>
|
||||
</introduction>
|
||||
<!-- Add one or more top-level section elements. These are collapsible.
|
||||
If using <autoOutline />, add an address attribute to identify it
|
||||
and specify a title so that it can be jumped to with a hyperlink. -->
|
||||
<section>
|
||||
<title>DefaultContractResolver</title>
|
||||
<content>
|
||||
<!-- Uncomment this to create a sub-section outline
|
||||
<autoOutline /> -->
|
||||
<para>The <codeEntityReference>T:Newtonsoft.Json.Serialization.DefaultContractResolver</codeEntityReference>
|
||||
is the default resolver used by the
|
||||
serializer. It provides many avenues of extensibility in the form of
|
||||
virtual methods that can be overriden.</para>
|
||||
</content>
|
||||
</section>
|
||||
<section>
|
||||
<title>CamelCasePropertyNamesContractResolver</title>
|
||||
<content>
|
||||
<!-- Uncomment this to create a sub-section outline
|
||||
<autoOutline /> -->
|
||||
<para><codeEntityReference>T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver</codeEntityReference>
|
||||
inherits from DefaultContractResolver and simply overrides the JSON
|
||||
property name to be written in <externalLink>
|
||||
<linkText>camelcase</linkText>
|
||||
<linkUri>http://en.wikipedia.org/wiki/CamelCase</linkUri>
|
||||
<linkTarget>_blank</linkTarget>
|
||||
</externalLink>.</para>
|
||||
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ContractResolver" title="ContractResolver" />
|
||||
</content>
|
||||
</section>
|
||||
<relatedTopics>
|
||||
<codeEntityReference>T:Newtonsoft.Json.Serialization.IContractResolver</codeEntityReference>
|
||||
<codeEntityReference>T:Newtonsoft.Json.Serialization.DefaultContractResolver</codeEntityReference>
|
||||
<codeEntityReference>T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver</codeEntityReference>
|
||||
</relatedTopics>
|
||||
</developerConceptualDocument>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<topic id="ContractResolver" revisionNumber="1">
|
||||
<developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!--
|
||||
<summary>
|
||||
<para>Optional summary abstract</para>
|
||||
</summary>
|
||||
-->
|
||||
<introduction>
|
||||
<para>The <codeEntityReference>T:Newtonsoft.Json.Serialization.IContractResolver</codeEntityReference>
|
||||
interface provides a way to customize how the
|
||||
JsonSerializer serializes and deserializes .NET objects to JSON.</para>
|
||||
<para>Implementing the IContractResolver interface and then assigning an
|
||||
instance to a JsonSerializer lets you control whether the object is
|
||||
serialized as a JSON object or JSON array, what object members should be
|
||||
serialized, how they are serialized and what they are called.</para>
|
||||
</introduction>
|
||||
<!-- Add one or more top-level section elements. These are collapsible.
|
||||
If using <autoOutline />, add an address attribute to identify it
|
||||
and specify a title so that it can be jumped to with a hyperlink. -->
|
||||
<section>
|
||||
<title>DefaultContractResolver</title>
|
||||
<content>
|
||||
<!-- Uncomment this to create a sub-section outline
|
||||
<autoOutline /> -->
|
||||
<para>The <codeEntityReference>T:Newtonsoft.Json.Serialization.DefaultContractResolver</codeEntityReference>
|
||||
is the default resolver used by the
|
||||
serializer. It provides many avenues of extensibility in the form of
|
||||
virtual methods that can be overriden.</para>
|
||||
</content>
|
||||
</section>
|
||||
<section>
|
||||
<title>CamelCasePropertyNamesContractResolver</title>
|
||||
<content>
|
||||
<!-- Uncomment this to create a sub-section outline
|
||||
<autoOutline /> -->
|
||||
<para><codeEntityReference>T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver</codeEntityReference>
|
||||
inherits from DefaultContractResolver and simply overrides the JSON
|
||||
property name to be written in <externalLink>
|
||||
<linkText>camelcase</linkText>
|
||||
<linkUri>http://en.wikipedia.org/wiki/CamelCase</linkUri>
|
||||
<linkTarget>_blank</linkTarget>
|
||||
</externalLink>.</para>
|
||||
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\SerializationTests.cs" region="ContractResolver" title="ContractResolver" />
|
||||
</content>
|
||||
</section>
|
||||
<section>
|
||||
<title>Custom Examples</title>
|
||||
<content>
|
||||
<para>Setting a <codeEntityReference>T:Newtonsoft.Json.JsonConverter</codeEntityReference> on a type
|
||||
using an IContractResolver.</para>
|
||||
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\PerformanceTests.cs" region="JsonConverterContractResolver" title="Use JsonConverter with IContractResolver" />
|
||||
|
||||
<para><externalLink>
|
||||
<linkText>Conditionally serializing properties</linkText>
|
||||
<linkUri>ConditionalProperties.htm</linkUri>
|
||||
<linkTarget>_self</linkTarget>
|
||||
</externalLink> using an IContractResolver.</para>
|
||||
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\ConditionalPropertiesTests.cs" region="ShouldSerializeContractResolver" title="Conditional properties with IContractResolver" />
|
||||
</content>
|
||||
</section>
|
||||
<relatedTopics>
|
||||
<codeEntityReference>T:Newtonsoft.Json.Serialization.IContractResolver</codeEntityReference>
|
||||
<codeEntityReference>T:Newtonsoft.Json.Serialization.DefaultContractResolver</codeEntityReference>
|
||||
<codeEntityReference>T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver</codeEntityReference>
|
||||
</relatedTopics>
|
||||
</developerConceptualDocument>
|
||||
</topic>
|
||||
@@ -0,0 +1,454 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<topic id="JsonNetVsDotNetSerializers" revisionNumber="1">
|
||||
<developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<introduction>
|
||||
<para>Json.NET offers many features not found in the JavaScriptSerializer and DataContractSerializer that come with .NET.</para>
|
||||
</introduction>
|
||||
<section>
|
||||
<title>Feature Comparison</title>
|
||||
<content>
|
||||
<table>
|
||||
<tableHeader>
|
||||
<row>
|
||||
<entry><para></para></entry>
|
||||
<entry><para>Json.NET</para></entry>
|
||||
<entry><para>DataContractJsonSerializer</para></entry>
|
||||
<entry><para>JavaScriptSerializer</para></entry>
|
||||
</row>
|
||||
</tableHeader>
|
||||
<row>
|
||||
<entry><para>Supports JSON</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports BSON</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports JSON Schema</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports .NET 2.0</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports .NET 3.5</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports .NET 4.0</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports Silverlight</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports Windows Phone</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports WinRT</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Open Source</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>MIT License</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>LINQ to JSON</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Thread Safe</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>XPath-like JSON query syntax</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Indented JSON support</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>
|
||||
<externalLink>
|
||||
<linkText>Efficient dictionary serialization</linkText>
|
||||
<linkUri>http://stackoverflow.com/questions/1207731/how-can-i-deserialize-json-to-a-simple-dictionarystring-string-in-asp-net</linkUri>
|
||||
<linkTarget>_blank</linkTarget>
|
||||
</externalLink>
|
||||
</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>
|
||||
<externalLink>
|
||||
<linkText>Nonsensical dictionary serialization</linkText>
|
||||
<linkUri>http://stackoverflow.com/questions/4559991/any-way-to-make-datacontractjsonserializer-serialize-dictionaries-properly</linkUri>
|
||||
<linkTarget>_blank</linkTarget>
|
||||
</externalLink>
|
||||
</para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Deserializes IList, IEnumerable, ICollection, IDictionary properties</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Serializes circular references</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports serializing objects by reference</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Deserializes polymorphic properties and collections</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Serializes and deserializes multidimensional arrays</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports including type names with JSON</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Globally customize serialization process</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports excluding null values when serializing</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports SerializationBinder</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Conditional property serialization</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Includes line number information in errors</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Converts XML to JSON and JSON to XML</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>JSON Schema validation</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>JSON Schema generation from .NET types</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Camel case JSON property names</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Non-default constructors support</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Serialization error handling</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports populating an existing object</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Efficiently serializes byte arrays as base64 text</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Handles NaN, Infinity, -Infinity and undefined</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Handles JavaScript constructors</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Serializes .NET 4.0 dynamic objects</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Serializes ISerializable objects</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports serializing enums to their text name</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>JSON recursion limit support</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Attribute property name customization</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Attribute property order customization</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Attribute property required customization</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports ISO8601 dates</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports JavaScript constructor dates</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports Microsoft AJAX dates</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Unquoted property names support</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Raw JSON support</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports reading and writing comments</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Serializes anonymous types</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Deserializes anonymous types</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Opt-in mode serialization</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Opt-out mode serialization</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Field (Serializable) mode serialization</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Efficiently stream reading and writing JSON</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Single or double quote JSON content</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports overriding a type's serialization</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports OnDeserialized, OnSerializing, OnSerialized and OnDeserializing attributes</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Supports serializing private properties</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>DataMember attribute support</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>MetdataType attribute support</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>DefaultValue attribute support</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Serializes DataSets and DataTables</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Serailizes Entity Framework</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Serializes nHibernate</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para>Case-insensitive property deserialization</para></entry>
|
||||
<entry><para><markup><img src="../tick.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
<entry><para><markup><img src="../cross.png" /></markup></para></entry>
|
||||
</row>
|
||||
</table>
|
||||
</content>
|
||||
</section>
|
||||
<section>
|
||||
<title>Benchmarks</title>
|
||||
<content>
|
||||
|
||||
<mediaLink>
|
||||
<image class="image" xlink:href="performance" mimeType="image/png" width="643" height="345" />
|
||||
<summary>Json.NET Performance</summary>
|
||||
</mediaLink>
|
||||
|
||||
</content>
|
||||
</section>
|
||||
</developerConceptualDocument>
|
||||
</topic>
|
||||
@@ -0,0 +1,101 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<topic id="JsonNetVsWindowsDataJson" revisionNumber="1">
|
||||
<developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<introduction>
|
||||
<para>Windows 8 introduces a new way to work with JSON via the <externalLink>
|
||||
<linkText>Windows.Data.Json</linkText>
|
||||
<linkUri>http://msdn.microsoft.com/en-us/library/windows/apps/xaml/br240639.aspx</linkUri>
|
||||
<linkTarget>_blank</linkTarget>
|
||||
</externalLink> namespace. Similar to LINQ to JSON in Json.NET
|
||||
it defines classes that can be used to parse values, strings, objects, and arrays from
|
||||
JSON text or serialize value types into JSON text.</para>
|
||||
<para>Below is a comparison of Json.NET's LINQ to JSON to Window 8's Windows.Data.Json.</para>
|
||||
</introduction>
|
||||
<section>
|
||||
<title>Exclusive Json.NET Features</title>
|
||||
<content>
|
||||
<list class="bullet">
|
||||
<listItem>
|
||||
<para>
|
||||
Runs on .NET 2, .NET 3, .NET 4, Silverlight and Windows Phone 7
|
||||
</para>
|
||||
</listItem>
|
||||
<listItem>
|
||||
<para>
|
||||
Supports dynamic programming
|
||||
</para>
|
||||
</listItem>
|
||||
<listItem>
|
||||
<para>
|
||||
Write indented JSON
|
||||
</para>
|
||||
</listItem>
|
||||
<listItem>
|
||||
<para>
|
||||
Customize reading and writing JSON with JsonConverters
|
||||
</para>
|
||||
</listItem>
|
||||
<listItem>
|
||||
<para>
|
||||
Read and write ISO8601 dates
|
||||
</para>
|
||||
</listItem>
|
||||
<listItem>
|
||||
<para>
|
||||
Better LINQ support
|
||||
</para>
|
||||
</listItem>
|
||||
</list>
|
||||
</content>
|
||||
</section>
|
||||
<section>
|
||||
<title>Creating JSON</title>
|
||||
<content>
|
||||
<para>The big difference between the two libraries when creating JSON is Windows.Data.Json requires
|
||||
string/integer/double values to be explicitly converted to JsonValue objects.</para>
|
||||
<para>Note that there is a weird limitation to creating JSON with Windows.Data.Json: it doesn't
|
||||
allow you to set properties to null or put null values in an array.</para>
|
||||
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\JsonNetVsWindowsDataJsonTests.cs" region="CreatingJSON" title="Creating JSON with Json.NET and Windows.Data.Json" />
|
||||
|
||||
</content>
|
||||
</section>
|
||||
<section>
|
||||
<title>Querying JSON</title>
|
||||
<content>
|
||||
<para>Windows.Data.Json requires a value to be cast to its exact type with the GetObject/GetArray methods
|
||||
before it can be used, making Windows.Data.Json's code verbose compared to LINQ to JSON.</para>
|
||||
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\JsonNetVsWindowsDataJsonTests.cs" region="QueryingJSON" title="Querying JSON with Json.NET and Windows.Data.Json" />
|
||||
|
||||
</content>
|
||||
</section>
|
||||
<section>
|
||||
<title>Performance</title>
|
||||
<content>
|
||||
<para>Json.NET is slightly slower at writing JSON than Windows.Data.Json but considerably faster at parsing JSON.</para>
|
||||
|
||||
<mediaLink>
|
||||
<image class="image" xlink:href="jsonnetwindowsdatajson" mimeType="image/png" width="592" height="356" />
|
||||
<summary>Json.NET and Windows.Data.Json Performance</summary>
|
||||
</mediaLink>
|
||||
|
||||
</content>
|
||||
</section>
|
||||
<section>
|
||||
<title>Converting Between LINQ to JSON and Windows.Data.Json</title>
|
||||
<content>
|
||||
<para>Json.NET supports converting between the types of the two libraries.
|
||||
This feature is useful if you are working with another API but you want to use Json.NET inside your own code.</para>
|
||||
<para>Use <codeEntityReference>Overload:Newtonsoft.Json.Linq.JToken.FromObject</codeEntityReference> to convert a Windows.Data.Json
|
||||
value to LINQ to JSON and use <codeEntityReference>Overload:Newtonsoft.Json.Linq.JToken.ToObject</codeEntityReference> to convert LINQ to JSON to Windows.Data.Json.</para>
|
||||
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\JsonNetVsWindowsDataJsonTests.cs" region="Converting" title="Converting between Json.NET and Windows.Data.Json" />
|
||||
|
||||
</content>
|
||||
</section>
|
||||
<relatedTopics>
|
||||
<codeEntityReference>N:Newtonsoft.Json.Linq</codeEntityReference>
|
||||
</relatedTopics>
|
||||
</developerConceptualDocument>
|
||||
</topic>
|
||||
+83
-83
@@ -1,84 +1,84 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<topic id="Performance" revisionNumber="1">
|
||||
<developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<introduction>
|
||||
<para>Out of the box Json.NET is faster than DataContractJsonSerializer and JavaScriptSerializer.
|
||||
Here are some tips to make it go even faster.</para>
|
||||
</introduction>
|
||||
<section>
|
||||
<title>Optimize Memory Usage</title>
|
||||
<content>
|
||||
<para>To keep an application consistantly fast it is important to minimize the
|
||||
amount of time the .NET framework spends performing <externalLink>
|
||||
<linkText>garbage collection</linkText>
|
||||
<linkUri>http://msdn.microsoft.com/en-us/library/ms973837.aspx</linkUri>
|
||||
<linkTarget>_blank</linkTarget>
|
||||
</externalLink>.
|
||||
Allocating too many objects, or allocating very large objects can slow down or even
|
||||
halt an application while garbage collection is in progress.
|
||||
</para>
|
||||
<para>To minimize memory usage and the number of objects allocated Json.NET supports
|
||||
serializing and deserializing directly to a stream. Reading or writing JSON a piece at a time instead of having
|
||||
the entire JSON string loaded into memory is especially important when working with JSON
|
||||
documents greater than 85kb in size to avoid the JSON string ending up in the <externalLink>
|
||||
<linkText>large object heap</linkText>
|
||||
<linkUri>http://msdn.microsoft.com/en-us/magazine/cc534993.aspx</linkUri>
|
||||
<linkTarget>_blank</linkTarget>
|
||||
</externalLink>.</para>
|
||||
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\PerformanceTests.cs" region="DeserializeString" title="Deserialize String" />
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\PerformanceTests.cs" region="DeserializeStream" title="Deserialize Stream" />
|
||||
|
||||
</content>
|
||||
</section>
|
||||
<section>
|
||||
<title>JsonConverters</title>
|
||||
<content>
|
||||
<para>Passing a <codeEntityReference>T:Newtonsoft.Json.JsonConverter</codeEntityReference> to SerializeObject or DeserializeObject provides a simple way to completely
|
||||
change how an object is serialized. There is however a small overhead; the CanConvert method is called for every
|
||||
type to check whether serialization should be handled by that JsonConverter.</para>
|
||||
<para>There are a couple of ways to continue to use JsonConverters without any overhead. The simplest way
|
||||
is to specify the JsonConverter using the <codeEntityReference>T:Newtonsoft.Json.JsonConverterAttribute</codeEntityReference>. This attribute tells the serializer
|
||||
to always use that converter when serializing and deserializing the type, without the check.</para>
|
||||
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\PerformanceTests.cs" region="JsonConverterAttribute" title="Use JsonConverter with JsonConverterAttribute" />
|
||||
|
||||
<para>If the class you want to convert isn't your own and you're unable to use an attribute a JsonConverter can still be used by
|
||||
creating your own <codeEntityReference>T:Newtonsoft.Json.Serialization.IContractResolver</codeEntityReference>.</para>
|
||||
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\PerformanceTests.cs" region="JsonConverterContractResolver" title="Use JsonConverter with IContractResolver" />
|
||||
|
||||
<para>The IContractResolver in the example above will set all DateTimes to use the JavaScriptDateConverter.</para>
|
||||
</content>
|
||||
</section>
|
||||
<section>
|
||||
<title>Manually Serialize</title>
|
||||
<content>
|
||||
<para>The absolute fastest way to read and write JSON is to use JsonTextReader and JsonTextWriter directly. Using a reader or writer
|
||||
directly skips any of the overhead from a serializer such as reflection.</para>
|
||||
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\PerformanceTests.cs" region="ReaderWriter" title="Manually serialize using JsonTextWriter" />
|
||||
|
||||
<para>If performance is important and you don't mind more code to get it then this is your best choice.</para>
|
||||
</content>
|
||||
</section>
|
||||
<section>
|
||||
<title>Benchmarks</title>
|
||||
<content>
|
||||
|
||||
<mediaLink>
|
||||
<image class="image" xlink:href="performance" mimeType="image/png" width="643" height="345" />
|
||||
<summary>Json.NET Performance</summary>
|
||||
</mediaLink>
|
||||
|
||||
</content>
|
||||
</section>
|
||||
<relatedTopics>
|
||||
<codeEntityReference>T:Newtonsoft.Json.JsonSerializer</codeEntityReference>
|
||||
<codeEntityReference>T:Newtonsoft.Json.JsonConverter</codeEntityReference>
|
||||
<codeEntityReference>T:Newtonsoft.Json.JsonConverterAttribute</codeEntityReference>
|
||||
<codeEntityReference>T:Newtonsoft.Json.JsonTextWriter</codeEntityReference>
|
||||
<codeEntityReference>T:Newtonsoft.Json.JsonTextReader</codeEntityReference>
|
||||
</relatedTopics>
|
||||
</developerConceptualDocument>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<topic id="Performance" revisionNumber="1">
|
||||
<developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<introduction>
|
||||
<para>Out of the box Json.NET is faster than DataContractJsonSerializer and JavaScriptSerializer.
|
||||
Here are some tips to make it go even faster.</para>
|
||||
</introduction>
|
||||
<section>
|
||||
<title>Optimize Memory Usage</title>
|
||||
<content>
|
||||
<para>To keep an application consistantly fast it is important to minimize the
|
||||
amount of time the .NET framework spends performing <externalLink>
|
||||
<linkText>garbage collection</linkText>
|
||||
<linkUri>http://msdn.microsoft.com/en-us/library/ms973837.aspx</linkUri>
|
||||
<linkTarget>_blank</linkTarget>
|
||||
</externalLink>.
|
||||
Allocating too many objects, or allocating very large objects can slow down or even
|
||||
halt an application while garbage collection is in progress.
|
||||
</para>
|
||||
<para>To minimize memory usage and the number of objects allocated Json.NET supports
|
||||
serializing and deserializing directly to a stream. Reading or writing JSON a piece at a time instead of having
|
||||
the entire JSON string loaded into memory is especially important when working with JSON
|
||||
documents greater than 85kb in size to avoid the JSON string ending up in the <externalLink>
|
||||
<linkText>large object heap</linkText>
|
||||
<linkUri>http://msdn.microsoft.com/en-us/magazine/cc534993.aspx</linkUri>
|
||||
<linkTarget>_blank</linkTarget>
|
||||
</externalLink>.</para>
|
||||
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\PerformanceTests.cs" region="DeserializeString" title="Deserialize String" />
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\PerformanceTests.cs" region="DeserializeStream" title="Deserialize Stream" />
|
||||
|
||||
</content>
|
||||
</section>
|
||||
<section>
|
||||
<title>JsonConverters</title>
|
||||
<content>
|
||||
<para>Passing a <codeEntityReference>T:Newtonsoft.Json.JsonConverter</codeEntityReference> to SerializeObject or DeserializeObject provides a simple way to completely
|
||||
change how an object is serialized. There is however a small overhead; the CanConvert method is called for every
|
||||
value to check whether serialization should be handled by that JsonConverter.</para>
|
||||
<para>There are a couple of ways to continue to use JsonConverters without any overhead. The simplest way
|
||||
is to specify the JsonConverter using the <codeEntityReference>T:Newtonsoft.Json.JsonConverterAttribute</codeEntityReference>. This attribute tells the serializer
|
||||
to always use that converter when serializing and deserializing the type, without the check.</para>
|
||||
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\PerformanceTests.cs" region="JsonConverterAttribute" title="Use JsonConverter with JsonConverterAttribute" />
|
||||
|
||||
<para>If the class you want to convert isn't your own and you're unable to use an attribute a JsonConverter can still be used by
|
||||
creating your own <codeEntityReference>T:Newtonsoft.Json.Serialization.IContractResolver</codeEntityReference>.</para>
|
||||
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\PerformanceTests.cs" region="JsonConverterContractResolver" title="Use JsonConverter with IContractResolver" />
|
||||
|
||||
<para>The IContractResolver in the example above will set all DateTimes to use the JavaScriptDateConverter.</para>
|
||||
</content>
|
||||
</section>
|
||||
<section>
|
||||
<title>Manually Serialize</title>
|
||||
<content>
|
||||
<para>The absolute fastest way to read and write JSON is to use JsonTextReader/JsonTextWriter directly to manually serialize types.
|
||||
Using a reader or writer directly skips any of the overhead from a serializer such as reflection.</para>
|
||||
|
||||
<code lang="cs" source="..\Src\Newtonsoft.Json.Tests\Documentation\PerformanceTests.cs" region="ReaderWriter" title="Manually serialize using JsonTextWriter" />
|
||||
|
||||
<para>If performance is important and you don't mind more code to get it then this is your best choice.</para>
|
||||
</content>
|
||||
</section>
|
||||
<section>
|
||||
<title>Benchmarks</title>
|
||||
<content>
|
||||
|
||||
<mediaLink>
|
||||
<image class="image" xlink:href="performance" mimeType="image/png" width="643" height="345" />
|
||||
<summary>Json.NET Performance</summary>
|
||||
</mediaLink>
|
||||
|
||||
</content>
|
||||
</section>
|
||||
<relatedTopics>
|
||||
<codeEntityReference>T:Newtonsoft.Json.JsonSerializer</codeEntityReference>
|
||||
<codeEntityReference>T:Newtonsoft.Json.JsonConverter</codeEntityReference>
|
||||
<codeEntityReference>T:Newtonsoft.Json.JsonConverterAttribute</codeEntityReference>
|
||||
<codeEntityReference>T:Newtonsoft.Json.JsonTextWriter</codeEntityReference>
|
||||
<codeEntityReference>T:Newtonsoft.Json.JsonTextReader</codeEntityReference>
|
||||
</relatedTopics>
|
||||
</developerConceptualDocument>
|
||||
</topic>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 655 B |
+5
-2
@@ -9,11 +9,12 @@
|
||||
<Topic id="SerializationErrorHandling" visible="True" title="Serialization Error Handling" />
|
||||
<Topic id="PreserveObjectReferences" visible="True" title="Preserving Object References" />
|
||||
<Topic id="CustomCreationConverter" visible="True" />
|
||||
<Topic id="ContractResolver" visible="True" />
|
||||
<Topic id="SerializingCollections" visible="True" title="Serializing Collections" />
|
||||
<Topic id="DatesInJSON" visible="True" title="Serializing Dates in JSON" />
|
||||
<Topic id="ReducingSerializedJSONSize" visible="True" title="Reducing Serialized JSON Size" />
|
||||
<Topic id="SerializingJSONFragments" visible="True" title="Serializing Partial JSON Fragments" />
|
||||
<Topic id="ConditionalProperties" visible="True" title="Conditional Properties" />
|
||||
<Topic id="ContractResolver" visible="True" title="Serialization using ContractResolver" />
|
||||
</Topic>
|
||||
<Topic id="LINQtoJSON" visible="True" title="LINQ to JSON">
|
||||
<Topic id="ParsingLINQtoJSON" visible="True" title="Parsing JSON" />
|
||||
@@ -21,8 +22,10 @@
|
||||
<Topic id="QueryingLINQtoJSON" visible="True" title="Querying JSON with LINQ" />
|
||||
<Topic id="SelectToken" visible="True" title="Querying JSON with SelectToken" />
|
||||
</Topic>
|
||||
<Topic id="Performance" visible="True" isSelected="true" title="Performance" />
|
||||
<Topic id="Performance" visible="True" title="Performance" />
|
||||
<Topic id="JsonSchema" visible="True" title="Validating JSON" />
|
||||
<Topic id="ReadingWritingJSON" visible="True" title="Basic Reading and Writing JSON" />
|
||||
<Topic id="ConvertingJSONandXML" visible="True" title="Converting between JSON and XML" />
|
||||
<Topic id="JsonNetVsWindowsDataJson" visible="True" title="Json.NET vs Windows.Data.Json" />
|
||||
<Topic id="JsonNetVsDotNetSerializers" visible="True" isSelected="true" title="Json.NET vs .NET Serializers" />
|
||||
</Topics>
|
||||
+18
-3
@@ -8,7 +8,7 @@
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{fd19f68e-72c8-4576-9775-b4480b0db686}</ProjectGuid>
|
||||
<SHFBSchemaVersion>1.9.3.0</SHFBSchemaVersion>
|
||||
<SHFBSchemaVersion>1.9.5.0</SHFBSchemaVersion>
|
||||
<!-- AssemblyName, Name, and RootNamespace are not used by SHFB but Visual
|
||||
Studio adds them anyway -->
|
||||
<AssemblyName>Documentation</AssemblyName>
|
||||
@@ -32,7 +32,7 @@
|
||||
<BuildLogFile>
|
||||
</BuildLogFile>
|
||||
<HelpFileFormat>Website</HelpFileFormat>
|
||||
<FrameworkVersion>.NET 4.0.30319</FrameworkVersion>
|
||||
<FrameworkVersion>.NET Framework 4.0</FrameworkVersion>
|
||||
<HelpTitle>Json.NET - Documentation</HelpTitle>
|
||||
<PresentationStyle>vs2005</PresentationStyle>
|
||||
<NamingMethod>MemberName</NamingMethod>
|
||||
@@ -70,7 +70,7 @@
|
||||
</outputPaths>
|
||||
<!-- Logo image file (optional). Filename is required. The height, width, altText, placement, and
|
||||
alignment attributes are optional. -->
|
||||
<logoFile filename="D:\Development\Source\Json\Newtonsoft.Json\Doc\logo.jpg" height="0" width="0" altText="Json.NET" placement="left" alignment="left" />
|
||||
<logoFile filename="{@ProjectFolder}logo.jpg" height="0" width="0" altText="Json.NET" placement="left" alignment="left" />
|
||||
</component>
|
||||
</ComponentConfig>
|
||||
<ComponentConfig id="Code Block Component" enabled="True">
|
||||
@@ -137,6 +137,9 @@
|
||||
<Content Include="donate.gif" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="JsonNetVsDotNetSerializers.aml" />
|
||||
<None Include="JsonNetVsWindowsDataJson.aml" />
|
||||
<None Include="ConditionalProperties.aml" />
|
||||
<None Include="CustomCreationConverter.aml" />
|
||||
<None Include="ContractResolver.aml" />
|
||||
<None Include="ConvertingJSONandXML.aml" />
|
||||
@@ -166,6 +169,18 @@
|
||||
<ContentLayout Include="doc.content" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="tick.png">
|
||||
<ImageId>tick</ImageId>
|
||||
<AlternateText>tick</AlternateText>
|
||||
</Content>
|
||||
<Content Include="cross.png">
|
||||
<ImageId>cross</ImageId>
|
||||
<AlternateText>cross</AlternateText>
|
||||
</Content>
|
||||
<Image Include="jsonnetwindowsdatajson.png">
|
||||
<ImageId>jsonnetwindowsdatajson</ImageId>
|
||||
<AlternateText>jsonnetwindowsdatajson</AlternateText>
|
||||
</Image>
|
||||
<Image Include="performance.png">
|
||||
<ImageId>performance</ImageId>
|
||||
<AlternateText>performance</AlternateText>
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 6.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 537 B |
@@ -0,0 +1,177 @@
|
||||
#region License
|
||||
// Copyright (c) 2007 James Newton-King
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person
|
||||
// obtaining a copy of this software and associated documentation
|
||||
// files (the "Software"), to deal in the Software without
|
||||
// restriction, including without limitation the rights to use,
|
||||
// copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the
|
||||
// Software is furnished to do so, subject to the following
|
||||
// conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
// OTHER DEALINGS IN THE SOFTWARE.
|
||||
#endregion
|
||||
|
||||
#if !(NET35 || NET20 || PORTABLE)
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Dynamic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using Newtonsoft.Json.Linq;
|
||||
#if !NETFX_CORE
|
||||
using NUnit.Framework;
|
||||
#else
|
||||
using Microsoft.VisualStudio.TestPlatform.UnitTestFramework;
|
||||
using TestFixture = Microsoft.VisualStudio.TestPlatform.UnitTestFramework.TestClassAttribute;
|
||||
using Test = Microsoft.VisualStudio.TestPlatform.UnitTestFramework.TestMethodAttribute;
|
||||
#endif
|
||||
using Newtonsoft.Json.Serialization;
|
||||
using Newtonsoft.Json.Tests.TestObjects;
|
||||
using Newtonsoft.Json.Utilities;
|
||||
using System.Globalization;
|
||||
|
||||
namespace Newtonsoft.Json.Tests.Documentation
|
||||
{
|
||||
public class Employee
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public Employee Manager { get; set; }
|
||||
}
|
||||
|
||||
#region ShouldSerializeContractResolver
|
||||
public class ShouldSerializeContractResolver : DefaultContractResolver
|
||||
{
|
||||
public new static readonly ShouldSerializeContractResolver Instance = new ShouldSerializeContractResolver();
|
||||
|
||||
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
|
||||
{
|
||||
JsonProperty property = base.CreateProperty(member, memberSerialization);
|
||||
|
||||
if (property.DeclaringType == typeof(Employee) && property.PropertyName == "Manager")
|
||||
{
|
||||
property.ShouldSerialize =
|
||||
instance =>
|
||||
{
|
||||
Employee e = (Employee) instance;
|
||||
return e.Manager != e;
|
||||
};
|
||||
}
|
||||
|
||||
return property;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
[TestFixture]
|
||||
public class ConditionalPropertiesTests : TestFixtureBase
|
||||
{
|
||||
#region EmployeeShouldSerializeExample
|
||||
public class Employee
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public Employee Manager { get; set; }
|
||||
|
||||
public bool ShouldSerializeManager()
|
||||
{
|
||||
// don't serialize the Manager property if an employee is their own manager
|
||||
return (Manager != this);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
[Test]
|
||||
public void ShouldSerializeClassTest()
|
||||
{
|
||||
#region ShouldSerializeClassTest
|
||||
Employee joe = new Employee();
|
||||
joe.Name = "Joe Employee";
|
||||
Employee mike = new Employee();
|
||||
mike.Name = "Mike Manager";
|
||||
|
||||
joe.Manager = mike;
|
||||
|
||||
// mike is his own manager
|
||||
// ShouldSerialize will skip this property
|
||||
mike.Manager = mike;
|
||||
|
||||
string json = JsonConvert.SerializeObject(new[] { joe, mike }, Formatting.Indented);
|
||||
// [
|
||||
// {
|
||||
// "Name": "Joe Employee",
|
||||
// "Manager": {
|
||||
// "Name": "Mike Manager"
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "Name": "Mike Manager"
|
||||
// }
|
||||
// ]
|
||||
#endregion
|
||||
|
||||
Assert.AreEqual(@"[
|
||||
{
|
||||
""Name"": ""Joe Employee"",
|
||||
""Manager"": {
|
||||
""Name"": ""Mike Manager""
|
||||
}
|
||||
},
|
||||
{
|
||||
""Name"": ""Mike Manager""
|
||||
}
|
||||
]", json);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ShouldSerializeContractResolverTest()
|
||||
{
|
||||
Newtonsoft.Json.Tests.Documentation.Employee joe = new Newtonsoft.Json.Tests.Documentation.Employee();
|
||||
joe.Name = "Joe Employee";
|
||||
Newtonsoft.Json.Tests.Documentation.Employee mike = new Newtonsoft.Json.Tests.Documentation.Employee();
|
||||
mike.Name = "Mike Manager";
|
||||
|
||||
joe.Manager = mike;
|
||||
mike.Manager = mike;
|
||||
|
||||
string json = JsonConvert.SerializeObject(
|
||||
new[] {joe, mike},
|
||||
Formatting.Indented,
|
||||
new JsonSerializerSettings
|
||||
{
|
||||
ContractResolver = ShouldSerializeContractResolver.Instance
|
||||
});
|
||||
|
||||
Assert.AreEqual(@"[
|
||||
{
|
||||
""Name"": ""Joe Employee"",
|
||||
""Manager"": {
|
||||
""Name"": ""Mike Manager""
|
||||
}
|
||||
},
|
||||
{
|
||||
""Name"": ""Mike Manager""
|
||||
}
|
||||
]", json);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,108 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace Newtonsoft.Json.Tests.Documentation
|
||||
{
|
||||
public class JsonNetVsWindowsDataJsonTests
|
||||
{
|
||||
public void CreatingJson()
|
||||
{
|
||||
#if NETFX_CORE
|
||||
#region CreatingJSON
|
||||
// Windows.Data.Json
|
||||
// -----------------
|
||||
JsonObject jsonObject = new JsonObject
|
||||
{
|
||||
{"CPU", JsonValue.CreateStringValue("Intel")},
|
||||
{
|
||||
"Drives", new JsonArray
|
||||
{
|
||||
JsonValue.CreateStringValue("DVD read/writer"),
|
||||
JsonValue.CreateStringValue("500 gigabyte hard drive")
|
||||
}
|
||||
}
|
||||
};
|
||||
string json1 = jsonObject.Stringify();
|
||||
|
||||
// LINQ to JSON
|
||||
// ------------
|
||||
JObject jObject = new JObject
|
||||
{
|
||||
{"CPU", "Intel"},
|
||||
{
|
||||
"Drives", new JArray
|
||||
{
|
||||
"DVD read/writer",
|
||||
"500 gigabyte hard drive"
|
||||
}
|
||||
}
|
||||
};
|
||||
string json2 = jObject.ToString();
|
||||
#endregion
|
||||
#endif
|
||||
}
|
||||
|
||||
public void QueryingJson()
|
||||
{
|
||||
#if NETFX_CORE
|
||||
#region QueryingJSON
|
||||
string json = @"{
|
||||
'channel': {
|
||||
'title': 'James Newton-King',
|
||||
'link': 'http://james.newtonking.com',
|
||||
'description': 'James Newton-King's blog.',
|
||||
'item': [
|
||||
{
|
||||
'title': 'Json.NET 1.3 + New license + Now on CodePlex',
|
||||
'description': 'Annoucing the release of Json.NET 1.3, the MIT license and the source being available on CodePlex',
|
||||
'link': 'http://james.newtonking.com/projects/json-net.aspx',
|
||||
'category': [
|
||||
'Json.NET',
|
||||
'CodePlex'
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}";
|
||||
|
||||
// Windows.Data.Json
|
||||
// -----------------
|
||||
JsonObject jsonObject = JsonObject.Parse(json);
|
||||
string itemTitle1 = jsonObject["channel"].GetObject()["item"].GetArray()[0].GetObject()["title"].GetString();
|
||||
|
||||
// LINQ to JSON
|
||||
// ------------
|
||||
JObject jObject = JObject.Parse(json);
|
||||
string itemTitle2 = (string)jObject["channel"]["item"][0]["title"];
|
||||
#endregion
|
||||
#endif
|
||||
}
|
||||
|
||||
public void Converting()
|
||||
{
|
||||
#if NETFX_CORE
|
||||
#region Converting
|
||||
JsonObject jsonObject = new JsonObject
|
||||
{
|
||||
{"CPU", JsonValue.CreateStringValue("Intel")},
|
||||
{"Drives", new JsonArray {
|
||||
JsonValue.CreateStringValue("DVD read/writer"),
|
||||
JsonValue.CreateStringValue("500 gigabyte hard drive")
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// convert Windows.Data.Json to LINQ to JSON
|
||||
JObject o = JObject.FromObject(jsonObject);
|
||||
|
||||
// convert LINQ to JSON to Windows.Data.Json
|
||||
JArray a = (JArray)o["Drives"];
|
||||
JsonArray jsonArray = a.ToObject<JsonArray>();
|
||||
#endregion
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -80,10 +80,13 @@ namespace Newtonsoft.Json.Tests.Documentation
|
||||
#region JsonConverterContractResolver
|
||||
public class ConverterContractResolver : DefaultContractResolver
|
||||
{
|
||||
public new static readonly ConverterContractResolver Instance = new ConverterContractResolver();
|
||||
|
||||
protected override JsonContract CreateContract(Type objectType)
|
||||
{
|
||||
JsonContract contract = base.CreateContract(objectType);
|
||||
|
||||
// this will only be called once and then cached
|
||||
if (objectType == typeof(DateTime) || objectType == typeof(DateTimeOffset))
|
||||
contract.Converter = new JavaScriptDateTimeConverter();
|
||||
|
||||
@@ -117,7 +120,7 @@ namespace Newtonsoft.Json.Tests.Documentation
|
||||
{
|
||||
string json = JsonConvert.SerializeObject(new DateTime(2000, 10, 10, 10, 10, 10, DateTimeKind.Utc), new JsonSerializerSettings
|
||||
{
|
||||
ContractResolver = new ConverterContractResolver()
|
||||
ContractResolver = ConverterContractResolver.Instance
|
||||
});
|
||||
|
||||
Console.WriteLine(json);
|
||||
|
||||
@@ -713,6 +713,7 @@ _____'propertyName': NaN
|
||||
jsonWriter.WriteValue(data);
|
||||
jsonWriter.WriteValue((object)data);
|
||||
jsonWriter.WriteValue((byte[])null);
|
||||
jsonWriter.WriteValue((Uri)null);
|
||||
jsonWriter.WriteEndArray();
|
||||
}
|
||||
|
||||
@@ -720,6 +721,7 @@ _____'propertyName': NaN
|
||||
""SGVsbG8gd29ybGQu"",
|
||||
""SGVsbG8gd29ybGQu"",
|
||||
""SGVsbG8gd29ybGQu"",
|
||||
null,
|
||||
null
|
||||
]";
|
||||
string result = sb.ToString();
|
||||
|
||||
@@ -117,6 +117,7 @@
|
||||
<Compile Include="Converters\StringEnumConverterTests.cs" />
|
||||
<Compile Include="Converters\VersionConverterTests.cs" />
|
||||
<Compile Include="Documentation\ConvertingJsonAndXmlTests.cs" />
|
||||
<Compile Include="Documentation\ConditionalPropertiesTests.cs" />
|
||||
<Compile Include="Documentation\PerformanceTests.cs" />
|
||||
<Compile Include="Documentation\JsonSchemaTests.cs" />
|
||||
<Compile Include="Documentation\ReadingAndWritingJsonTests.cs" />
|
||||
|
||||
@@ -64,8 +64,8 @@ namespace Newtonsoft.Json.Tests
|
||||
[TestFixture]
|
||||
public class PerformanceTests : TestFixtureBase
|
||||
{
|
||||
private const int Iterations = 100;
|
||||
//private const int Iterations = 5000;
|
||||
//private const int Iterations = 100;
|
||||
private const int Iterations = 5000;
|
||||
|
||||
#region Data
|
||||
|
||||
@@ -122,8 +122,6 @@ namespace Newtonsoft.Json.Tests
|
||||
TestClass test = CreateSerializationObject();
|
||||
|
||||
SerializeTests(test);
|
||||
|
||||
Deserialize();
|
||||
}
|
||||
|
||||
private void SerializeTests(object value)
|
||||
|
||||
@@ -76,5 +76,5 @@ using System.Security;
|
||||
// by using the '*' as shown below:
|
||||
[assembly: AssemblyVersion("4.5.0.0")]
|
||||
#if !PocketPC
|
||||
[assembly: AssemblyFileVersion("4.5.10.15427")]
|
||||
[assembly: AssemblyFileVersion("4.5.10.15501")]
|
||||
#endif
|
||||
|
||||
@@ -148,7 +148,7 @@ namespace Newtonsoft.Json
|
||||
/// </summary>
|
||||
public override void WriteStartObject()
|
||||
{
|
||||
base.WriteStartObject();
|
||||
InternalWriteStart(JsonToken.StartObject, JsonContainerType.Object);
|
||||
|
||||
_writer.Write("{");
|
||||
}
|
||||
@@ -158,7 +158,7 @@ namespace Newtonsoft.Json
|
||||
/// </summary>
|
||||
public override void WriteStartArray()
|
||||
{
|
||||
base.WriteStartArray();
|
||||
InternalWriteStart(JsonToken.StartArray, JsonContainerType.Array);
|
||||
|
||||
_writer.Write("[");
|
||||
}
|
||||
@@ -169,7 +169,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="name">The name of the constructor.</param>
|
||||
public override void WriteStartConstructor(string name)
|
||||
{
|
||||
base.WriteStartConstructor(name);
|
||||
InternalWriteStart(JsonToken.StartConstructor, JsonContainerType.Constructor);
|
||||
|
||||
_writer.Write("new ");
|
||||
_writer.Write(name);
|
||||
@@ -204,7 +204,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="name">The name of the property.</param>
|
||||
public override void WritePropertyName(string name)
|
||||
{
|
||||
base.WritePropertyName(name);
|
||||
InternalWritePropertyName(name);
|
||||
|
||||
JavaScriptUtils.WriteEscapedJavaScriptString(_writer, name, _quoteChar, _quoteName);
|
||||
|
||||
@@ -259,7 +259,7 @@ namespace Newtonsoft.Json
|
||||
/// </summary>
|
||||
public override void WriteNull()
|
||||
{
|
||||
base.WriteNull();
|
||||
InternalWriteNull();
|
||||
WriteValueInternal(JsonConvert.Null, JsonToken.Null);
|
||||
}
|
||||
|
||||
@@ -268,7 +268,7 @@ namespace Newtonsoft.Json
|
||||
/// </summary>
|
||||
public override void WriteUndefined()
|
||||
{
|
||||
base.WriteUndefined();
|
||||
InternalWriteUndefined();
|
||||
WriteValueInternal(JsonConvert.Undefined, JsonToken.Undefined);
|
||||
}
|
||||
|
||||
@@ -278,7 +278,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="json">The raw JSON to write.</param>
|
||||
public override void WriteRaw(string json)
|
||||
{
|
||||
base.WriteRaw(json);
|
||||
InternalWriteRaw();
|
||||
|
||||
_writer.Write(json);
|
||||
}
|
||||
@@ -289,7 +289,8 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="String"/> value to write.</param>
|
||||
public override void WriteValue(string value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
InternalWriteValue(JsonToken.String);
|
||||
|
||||
if (value == null)
|
||||
WriteValueInternal(JsonConvert.Null, JsonToken.Null);
|
||||
else
|
||||
@@ -302,7 +303,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Int32"/> value to write.</param>
|
||||
public override void WriteValue(int value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
InternalWriteValue(JsonToken.Integer);
|
||||
WriteValueInternal(JsonConvert.ToString(value), JsonToken.Integer);
|
||||
}
|
||||
|
||||
@@ -313,7 +314,7 @@ namespace Newtonsoft.Json
|
||||
[CLSCompliant(false)]
|
||||
public override void WriteValue(uint value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
InternalWriteValue(JsonToken.Integer);
|
||||
WriteValueInternal(JsonConvert.ToString(value), JsonToken.Integer);
|
||||
}
|
||||
|
||||
@@ -323,7 +324,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Int64"/> value to write.</param>
|
||||
public override void WriteValue(long value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
InternalWriteValue(JsonToken.Integer);
|
||||
WriteValueInternal(JsonConvert.ToString(value), JsonToken.Integer);
|
||||
}
|
||||
|
||||
@@ -334,7 +335,7 @@ namespace Newtonsoft.Json
|
||||
[CLSCompliant(false)]
|
||||
public override void WriteValue(ulong value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
InternalWriteValue(JsonToken.Integer);
|
||||
WriteValueInternal(JsonConvert.ToString(value), JsonToken.Integer);
|
||||
}
|
||||
|
||||
@@ -344,7 +345,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Single"/> value to write.</param>
|
||||
public override void WriteValue(float value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
InternalWriteValue(JsonToken.Float);
|
||||
WriteValueInternal(JsonConvert.ToString(value), JsonToken.Float);
|
||||
}
|
||||
|
||||
@@ -354,7 +355,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Double"/> value to write.</param>
|
||||
public override void WriteValue(double value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
InternalWriteValue(JsonToken.Float);
|
||||
WriteValueInternal(JsonConvert.ToString(value), JsonToken.Float);
|
||||
}
|
||||
|
||||
@@ -364,7 +365,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Boolean"/> value to write.</param>
|
||||
public override void WriteValue(bool value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
InternalWriteValue(JsonToken.Boolean);
|
||||
WriteValueInternal(JsonConvert.ToString(value), JsonToken.Boolean);
|
||||
}
|
||||
|
||||
@@ -374,7 +375,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Int16"/> value to write.</param>
|
||||
public override void WriteValue(short value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
InternalWriteValue(JsonToken.Integer);
|
||||
WriteValueInternal(JsonConvert.ToString(value), JsonToken.Integer);
|
||||
}
|
||||
|
||||
@@ -385,7 +386,7 @@ namespace Newtonsoft.Json
|
||||
[CLSCompliant(false)]
|
||||
public override void WriteValue(ushort value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
InternalWriteValue(JsonToken.Integer);
|
||||
WriteValueInternal(JsonConvert.ToString(value), JsonToken.Integer);
|
||||
}
|
||||
|
||||
@@ -395,8 +396,8 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Char"/> value to write.</param>
|
||||
public override void WriteValue(char value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
WriteValueInternal(JsonConvert.ToString(value), JsonToken.Integer);
|
||||
InternalWriteValue(JsonToken.String);
|
||||
WriteValueInternal(JsonConvert.ToString(value), JsonToken.String);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -405,7 +406,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Byte"/> value to write.</param>
|
||||
public override void WriteValue(byte value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
InternalWriteValue(JsonToken.Integer);
|
||||
WriteValueInternal(JsonConvert.ToString(value), JsonToken.Integer);
|
||||
}
|
||||
|
||||
@@ -416,7 +417,7 @@ namespace Newtonsoft.Json
|
||||
[CLSCompliant(false)]
|
||||
public override void WriteValue(sbyte value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
InternalWriteValue(JsonToken.Integer);
|
||||
WriteValueInternal(JsonConvert.ToString(value), JsonToken.Integer);
|
||||
}
|
||||
|
||||
@@ -426,7 +427,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Decimal"/> value to write.</param>
|
||||
public override void WriteValue(decimal value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
InternalWriteValue(JsonToken.Float);
|
||||
WriteValueInternal(JsonConvert.ToString(value), JsonToken.Float);
|
||||
}
|
||||
|
||||
@@ -436,7 +437,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="DateTime"/> value to write.</param>
|
||||
public override void WriteValue(DateTime value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
InternalWriteValue(JsonToken.Date);
|
||||
value = JsonConvert.EnsureDateTime(value, DateTimeZoneHandling);
|
||||
JsonConvert.WriteDateTimeString(_writer, value, DateFormatHandling);
|
||||
}
|
||||
@@ -447,10 +448,13 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="T:Byte[]"/> value to write.</param>
|
||||
public override void WriteValue(byte[] value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
|
||||
if (value != null)
|
||||
if (value == null)
|
||||
{
|
||||
WriteNull();
|
||||
}
|
||||
else
|
||||
{
|
||||
InternalWriteValue(JsonToken.Bytes);
|
||||
_writer.Write(_quoteChar);
|
||||
Base64Encoder.Encode(value, 0, value.Length);
|
||||
Base64Encoder.Flush();
|
||||
@@ -465,7 +469,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="DateTimeOffset"/> value to write.</param>
|
||||
public override void WriteValue(DateTimeOffset value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
InternalWriteValue(JsonToken.Date);
|
||||
WriteValueInternal(JsonConvert.ToString(value, DateFormatHandling), JsonToken.Date);
|
||||
}
|
||||
#endif
|
||||
@@ -476,7 +480,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Guid"/> value to write.</param>
|
||||
public override void WriteValue(Guid value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
InternalWriteValue(JsonToken.String);
|
||||
WriteValueInternal(JsonConvert.ToString(value), JsonToken.String);
|
||||
}
|
||||
|
||||
@@ -486,7 +490,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="TimeSpan"/> value to write.</param>
|
||||
public override void WriteValue(TimeSpan value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
InternalWriteValue(JsonToken.String);
|
||||
WriteValueInternal(JsonConvert.ToString(value), JsonToken.String);
|
||||
}
|
||||
|
||||
@@ -496,8 +500,15 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Uri"/> value to write.</param>
|
||||
public override void WriteValue(Uri value)
|
||||
{
|
||||
base.WriteValue(value);
|
||||
WriteValueInternal(JsonConvert.ToString(value), JsonToken.String);
|
||||
if (value == null)
|
||||
{
|
||||
WriteNull();
|
||||
}
|
||||
else
|
||||
{
|
||||
InternalWriteValue(JsonToken.String);
|
||||
WriteValueInternal(JsonConvert.ToString(value), JsonToken.String);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -507,7 +518,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="text">Text to place inside the comment.</param>
|
||||
public override void WriteComment(string text)
|
||||
{
|
||||
base.WriteComment(text);
|
||||
InternalWriteComment();
|
||||
|
||||
_writer.Write("/*");
|
||||
_writer.Write(text);
|
||||
@@ -520,7 +531,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="ws">The string of white space characters.</param>
|
||||
public override void WriteWhitespace(string ws)
|
||||
{
|
||||
base.WriteWhitespace(ws);
|
||||
InternalWriteWhitespace(ws);
|
||||
|
||||
_writer.Write(ws);
|
||||
}
|
||||
|
||||
@@ -54,7 +54,6 @@ namespace Newtonsoft.Json
|
||||
Array,
|
||||
ConstructorStart,
|
||||
Constructor,
|
||||
Bytes,
|
||||
Closed,
|
||||
Error
|
||||
}
|
||||
@@ -69,7 +68,7 @@ namespace Newtonsoft.Json
|
||||
/* StartObject */new[]{ State.ObjectStart, State.ObjectStart, State.Error, State.Error, State.ObjectStart, State.ObjectStart, State.ObjectStart, State.ObjectStart, State.Error, State.Error },
|
||||
/* StartArray */new[]{ State.ArrayStart, State.ArrayStart, State.Error, State.Error, State.ArrayStart, State.ArrayStart, State.ArrayStart, State.ArrayStart, State.Error, State.Error },
|
||||
/* StartConstructor */new[]{ State.ConstructorStart, State.ConstructorStart, State.Error, State.Error, State.ConstructorStart, State.ConstructorStart, State.ConstructorStart, State.ConstructorStart, State.Error, State.Error },
|
||||
/* StartProperty */new[]{ State.Property, State.Error, State.Property, State.Property, State.Error, State.Error, State.Error, State.Error, State.Error, State.Error },
|
||||
/* Property */new[]{ State.Property, State.Error, State.Property, State.Property, State.Error, State.Error, State.Error, State.Error, State.Error, State.Error },
|
||||
/* Comment */new[]{ State.Start, State.Property, State.ObjectStart, State.Object, State.ArrayStart, State.Array, State.Constructor, State.Constructor, State.Error, State.Error },
|
||||
/* Raw */new[]{ State.Start, State.Property, State.ObjectStart, State.Object, State.ArrayStart, State.Array, State.Constructor, State.Constructor, State.Error, State.Error },
|
||||
/* Value (this will be copied) */new[]{ State.Start, State.Object, State.Error, State.Error, State.Array, State.Array, State.Constructor, State.Constructor, State.Error, State.Error }
|
||||
@@ -142,7 +141,7 @@ namespace Newtonsoft.Json
|
||||
return depth;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets the state of the writer.
|
||||
/// </summary>
|
||||
@@ -304,10 +303,15 @@ namespace Newtonsoft.Json
|
||||
/// Writes the beginning of a Json object.
|
||||
/// </summary>
|
||||
public virtual void WriteStartObject()
|
||||
{
|
||||
InternalWriteStart(JsonToken.StartObject, JsonContainerType.Object);
|
||||
}
|
||||
|
||||
internal void InternalWriteStart(JsonToken token, JsonContainerType container)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.StartObject);
|
||||
Push(JsonContainerType.Object);
|
||||
AutoComplete(token);
|
||||
Push(container);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -315,7 +319,7 @@ namespace Newtonsoft.Json
|
||||
/// </summary>
|
||||
public virtual void WriteEndObject()
|
||||
{
|
||||
AutoCompleteClose(JsonContainerType.Object);
|
||||
InternalWriteEnd(JsonContainerType.Object);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -323,9 +327,7 @@ namespace Newtonsoft.Json
|
||||
/// </summary>
|
||||
public virtual void WriteStartArray()
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.StartArray);
|
||||
Push(JsonContainerType.Array);
|
||||
InternalWriteStart(JsonToken.StartArray, JsonContainerType.Array);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -333,7 +335,7 @@ namespace Newtonsoft.Json
|
||||
/// </summary>
|
||||
public virtual void WriteEndArray()
|
||||
{
|
||||
AutoCompleteClose(JsonContainerType.Array);
|
||||
InternalWriteEnd(JsonContainerType.Array);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -342,9 +344,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="name">The name of the constructor.</param>
|
||||
public virtual void WriteStartConstructor(string name)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.StartConstructor);
|
||||
Push(JsonContainerType.Constructor);
|
||||
InternalWriteStart(JsonToken.StartConstructor, JsonContainerType.Constructor);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -352,7 +352,12 @@ namespace Newtonsoft.Json
|
||||
/// </summary>
|
||||
public virtual void WriteEndConstructor()
|
||||
{
|
||||
AutoCompleteClose(JsonContainerType.Constructor);
|
||||
InternalWriteEnd(JsonContainerType.Constructor);
|
||||
}
|
||||
|
||||
internal void InternalWriteEnd(JsonContainerType container)
|
||||
{
|
||||
AutoCompleteClose(container);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -360,6 +365,11 @@ namespace Newtonsoft.Json
|
||||
/// </summary>
|
||||
/// <param name="name">The name of the property.</param>
|
||||
public virtual void WritePropertyName(string name)
|
||||
{
|
||||
InternalWritePropertyName(name);
|
||||
}
|
||||
|
||||
internal void InternalWritePropertyName(string name)
|
||||
{
|
||||
_currentPosition.PropertyName = name;
|
||||
AutoComplete(JsonToken.PropertyName);
|
||||
@@ -672,22 +682,16 @@ namespace Newtonsoft.Json
|
||||
{
|
||||
WriteValueDelimiter();
|
||||
}
|
||||
else if (_currentState == State.Property)
|
||||
{
|
||||
if (_formatting == Formatting.Indented)
|
||||
WriteIndentSpace();
|
||||
}
|
||||
|
||||
if (_formatting == Formatting.Indented)
|
||||
{
|
||||
WriteState writeState = WriteState;
|
||||
if (_currentState == State.Property)
|
||||
WriteIndentSpace();
|
||||
|
||||
// don't indent a property when it is the first token to be written (i.e. at the start)
|
||||
if ((tokenBeingWritten == JsonToken.PropertyName && writeState != WriteState.Start) ||
|
||||
writeState == WriteState.Array || writeState == WriteState.Constructor)
|
||||
{
|
||||
if ((_currentState == State.Array || _currentState == State.ArrayStart || _currentState == State.Constructor || _currentState == State.ConstructorStart)
|
||||
|| (tokenBeingWritten == JsonToken.PropertyName && _currentState != State.Start))
|
||||
WriteIndent();
|
||||
}
|
||||
}
|
||||
|
||||
_currentState = newState;
|
||||
@@ -698,6 +702,11 @@ namespace Newtonsoft.Json
|
||||
/// Writes a null value.
|
||||
/// </summary>
|
||||
public virtual void WriteNull()
|
||||
{
|
||||
InternalWriteNull();
|
||||
}
|
||||
|
||||
internal void InternalWriteNull()
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.Null);
|
||||
@@ -707,6 +716,11 @@ namespace Newtonsoft.Json
|
||||
/// Writes an undefined value.
|
||||
/// </summary>
|
||||
public virtual void WriteUndefined()
|
||||
{
|
||||
InternalWriteUndefined();
|
||||
}
|
||||
|
||||
internal void InternalWriteUndefined()
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.Undefined);
|
||||
@@ -717,6 +731,11 @@ namespace Newtonsoft.Json
|
||||
/// </summary>
|
||||
/// <param name="json">The raw JSON to write.</param>
|
||||
public virtual void WriteRaw(string json)
|
||||
{
|
||||
InternalWriteRaw();
|
||||
}
|
||||
|
||||
internal void InternalWriteRaw()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -737,9 +756,14 @@ namespace Newtonsoft.Json
|
||||
/// </summary>
|
||||
/// <param name="value">The <see cref="String"/> value to write.</param>
|
||||
public virtual void WriteValue(string value)
|
||||
{
|
||||
InternalWriteValue(JsonToken.String);
|
||||
}
|
||||
|
||||
internal void InternalWriteValue(JsonToken token)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.String);
|
||||
AutoComplete(token);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -748,8 +772,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Int32"/> value to write.</param>
|
||||
public virtual void WriteValue(int value)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.Integer);
|
||||
InternalWriteValue(JsonToken.Integer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -759,8 +782,7 @@ namespace Newtonsoft.Json
|
||||
[CLSCompliant(false)]
|
||||
public virtual void WriteValue(uint value)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.Integer);
|
||||
InternalWriteValue(JsonToken.Integer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -769,8 +791,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Int64"/> value to write.</param>
|
||||
public virtual void WriteValue(long value)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.Integer);
|
||||
InternalWriteValue(JsonToken.Integer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -780,8 +801,7 @@ namespace Newtonsoft.Json
|
||||
[CLSCompliant(false)]
|
||||
public virtual void WriteValue(ulong value)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.Integer);
|
||||
InternalWriteValue(JsonToken.Integer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -790,8 +810,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Single"/> value to write.</param>
|
||||
public virtual void WriteValue(float value)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.Float);
|
||||
InternalWriteValue(JsonToken.Float);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -800,8 +819,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Double"/> value to write.</param>
|
||||
public virtual void WriteValue(double value)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.Float);
|
||||
InternalWriteValue(JsonToken.Float);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -810,8 +828,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Boolean"/> value to write.</param>
|
||||
public virtual void WriteValue(bool value)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.Boolean);
|
||||
InternalWriteValue(JsonToken.Boolean);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -820,8 +837,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Int16"/> value to write.</param>
|
||||
public virtual void WriteValue(short value)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.Integer);
|
||||
InternalWriteValue(JsonToken.Integer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -831,8 +847,7 @@ namespace Newtonsoft.Json
|
||||
[CLSCompliant(false)]
|
||||
public virtual void WriteValue(ushort value)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.Integer);
|
||||
InternalWriteValue(JsonToken.Integer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -841,8 +856,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Char"/> value to write.</param>
|
||||
public virtual void WriteValue(char value)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.String);
|
||||
InternalWriteValue(JsonToken.String);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -851,8 +865,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Byte"/> value to write.</param>
|
||||
public virtual void WriteValue(byte value)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.Integer);
|
||||
InternalWriteValue(JsonToken.Integer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -862,8 +875,7 @@ namespace Newtonsoft.Json
|
||||
[CLSCompliant(false)]
|
||||
public virtual void WriteValue(sbyte value)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.Integer);
|
||||
InternalWriteValue(JsonToken.Integer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -872,8 +884,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Decimal"/> value to write.</param>
|
||||
public virtual void WriteValue(decimal value)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.Float);
|
||||
InternalWriteValue(JsonToken.Float);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -882,8 +893,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="DateTime"/> value to write.</param>
|
||||
public virtual void WriteValue(DateTime value)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.Date);
|
||||
InternalWriteValue(JsonToken.Date);
|
||||
}
|
||||
|
||||
#if !PocketPC && !NET20
|
||||
@@ -893,8 +903,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="DateTimeOffset"/> value to write.</param>
|
||||
public virtual void WriteValue(DateTimeOffset value)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.Date);
|
||||
InternalWriteValue(JsonToken.Date);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -904,8 +913,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="Guid"/> value to write.</param>
|
||||
public virtual void WriteValue(Guid value)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.String);
|
||||
InternalWriteValue(JsonToken.String);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -914,8 +922,7 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The <see cref="TimeSpan"/> value to write.</param>
|
||||
public virtual void WriteValue(TimeSpan value)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.String);
|
||||
InternalWriteValue(JsonToken.String);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -1135,14 +1142,9 @@ namespace Newtonsoft.Json
|
||||
public virtual void WriteValue(byte[] value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
WriteNull();
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.Bytes);
|
||||
}
|
||||
InternalWriteValue(JsonToken.Bytes);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -1152,14 +1154,9 @@ namespace Newtonsoft.Json
|
||||
public virtual void WriteValue(Uri value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
WriteNull();
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
AutoComplete(JsonToken.String);
|
||||
}
|
||||
InternalWriteValue(JsonToken.String);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -1270,7 +1267,11 @@ namespace Newtonsoft.Json
|
||||
/// <param name="text">Text to place inside the comment.</param>
|
||||
public virtual void WriteComment(string text)
|
||||
{
|
||||
UpdateScopeWithFinishedValue();
|
||||
InternalWriteComment();
|
||||
}
|
||||
|
||||
internal void InternalWriteComment()
|
||||
{
|
||||
AutoComplete(JsonToken.Comment);
|
||||
}
|
||||
|
||||
@@ -1279,6 +1280,11 @@ namespace Newtonsoft.Json
|
||||
/// </summary>
|
||||
/// <param name="ws">The string of white space characters.</param>
|
||||
public virtual void WriteWhitespace(string ws)
|
||||
{
|
||||
InternalWriteWhitespace(ws);
|
||||
}
|
||||
|
||||
internal void InternalWriteWhitespace(string ws)
|
||||
{
|
||||
if (ws != null)
|
||||
{
|
||||
@@ -1287,7 +1293,6 @@ namespace Newtonsoft.Json
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void IDisposable.Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
|
||||
@@ -90,7 +90,7 @@ using System.Security;
|
||||
// by using the '*' as shown below:
|
||||
[assembly: AssemblyVersion("4.5.0.0")]
|
||||
#if !PocketPC
|
||||
[assembly: AssemblyFileVersion("4.5.10.15427")]
|
||||
[assembly: AssemblyFileVersion("4.5.10.15501")]
|
||||
#endif
|
||||
|
||||
[assembly: CLSCompliant(true)]
|
||||
|
||||
Reference in New Issue
Block a user