-Documentation

-Performance
This commit is contained in:
James Newton-King
2012-11-01 17:32:05 +13:00
parent d92b8ceeb5
commit 92ce080f24
14 changed files with 1023 additions and 343 deletions
+454
View File
@@ -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&apos;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>
+101
View File
@@ -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&apos;s LINQ to JSON to Window 8&apos;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&apos;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&apos;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>
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

+30 -28
View File
@@ -1,29 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<Topics>
<Topic id="Introduction" visible="True" isDefault="true" />
<Topic id="SerializingJSON" visible="True" isExpanded="true" title="Serializing and Deserializing JSON">
<Topic id="SerializationSettings" visible="True" title="Serialization Settings" />
<Topic id="SerializationGuide" visible="True" title="Serialization Guide" />
<Topic id="SerializationAttributes" visible="True" title="Serialization Attributes" />
<Topic id="SerializationCallbacks" visible="True" title="Serialization Callbacks" />
<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="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" isSelected="true" title="Serialization using ContractResolver" />
</Topic>
<Topic id="LINQtoJSON" visible="True" title="LINQ to JSON">
<Topic id="ParsingLINQtoJSON" visible="True" title="Parsing JSON" />
<Topic id="CreatingLINQtoJSON" visible="True" title="Creating JSON" />
<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" 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" />
<?xml version="1.0" encoding="utf-8"?>
<Topics>
<Topic id="Introduction" visible="True" isDefault="true" />
<Topic id="SerializingJSON" visible="True" title="Serializing and Deserializing JSON">
<Topic id="SerializationSettings" visible="True" title="Serialization Settings" />
<Topic id="SerializationGuide" visible="True" title="Serialization Guide" />
<Topic id="SerializationAttributes" visible="True" title="Serialization Attributes" />
<Topic id="SerializationCallbacks" visible="True" title="Serialization Callbacks" />
<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="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" />
<Topic id="CreatingLINQtoJSON" visible="True" title="Creating JSON" />
<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" 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>
+194 -180
View File
@@ -1,181 +1,195 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<!-- The configuration and platform will be used to determine which
assemblies to include from solution and project documentation
sources -->
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{fd19f68e-72c8-4576-9775-b4480b0db686}</ProjectGuid>
<SHFBSchemaVersion>1.9.5.0</SHFBSchemaVersion>
<!-- AssemblyName, Name, and RootNamespace are not used by SHFB but Visual
Studio adds them anyway -->
<AssemblyName>Documentation</AssemblyName>
<RootNamespace>Documentation</RootNamespace>
<Name>Documentation</Name>
<!-- SHFB properties -->
<OutputPath>..\Working\Documentation\</OutputPath>
<HtmlHelpName>Documentation</HtmlHelpName>
<ProjectSummary>
</ProjectSummary>
<MissingTags>Summary, Parameter, Returns, AutoDocumentCtors, Namespace, TypeParameter, AutoDocumentDispose</MissingTags>
<VisibleItems>InheritedMembers, InheritedFrameworkMembers, Protected, SealedProtected</VisibleItems>
<HtmlHelp1xCompilerPath>
</HtmlHelp1xCompilerPath>
<HtmlHelp2xCompilerPath>
</HtmlHelp2xCompilerPath>
<SandcastlePath>
</SandcastlePath>
<WorkingPath>
</WorkingPath>
<BuildLogFile>
</BuildLogFile>
<HelpFileFormat>Website</HelpFileFormat>
<FrameworkVersion>.NET Framework 4.0</FrameworkVersion>
<HelpTitle>Json.NET - Documentation</HelpTitle>
<PresentationStyle>vs2005</PresentationStyle>
<NamingMethod>MemberName</NamingMethod>
<DocumentationSourcePath>..\Src\Newtonsoft.Json\bin\Release</DocumentationSourcePath>
<DocumentationSources>
<DocumentationSource sourceFile="$(DocumentationSourcePath)\Newtonsoft.Json.dll" />
<DocumentationSource sourceFile="$(DocumentationSourcePath)\Newtonsoft.Json.xml" />
</DocumentationSources>
<NamespaceSummaries>
<NamespaceSummaryItem name="(global)" isDocumented="False" />
<NamespaceSummaryItem name="Newtonsoft.Json" isDocumented="True">The &lt;b&gt;Newtonsoft.Json&lt;/b&gt; namespace provides classes that are used to implement the core services of the framework.</NamespaceSummaryItem>
<NamespaceSummaryItem name="Newtonsoft.Json.Converters" isDocumented="True">The &lt;b&gt;Newtonsoft.Json.Converters&lt;/b&gt; namespace provides classes that inherit from &lt;a href="T_Newtonsoft_Json_JsonConverter.htm"&gt;JsonConverter&lt;/a&gt;.</NamespaceSummaryItem>
<NamespaceSummaryItem name="Newtonsoft.Json.Linq" isDocumented="True">The &lt;b&gt;Newtonsoft.Json.Linq&lt;/b&gt; namespace provides classes that are used to implement LINQ to JSON.</NamespaceSummaryItem>
<NamespaceSummaryItem name="Newtonsoft.Json.Linq.ComponentModel" isDocumented="True">The &lt;b&gt;Newtonsoft.Json.Linq.ComponentModel&lt;/b&gt; namespace provides classes for LINQ to JSON databinding.</NamespaceSummaryItem>
<NamespaceSummaryItem name="Newtonsoft.Json.Schema" isDocumented="True">The &lt;b&gt;Newtonsoft.Json.Schema&lt;/b&gt; namespace provides classes that are used to implement JSON schema.</NamespaceSummaryItem>
<NamespaceSummaryItem name="Newtonsoft.Json.Serialization" isDocumented="True">The &lt;b&gt;Newtonsoft.Json.Linq&lt;/b&gt; namespace provides classes that are used when serializing and deserializing JSON.</NamespaceSummaryItem>
<NamespaceSummaryItem name="Newtonsoft.Json.Utilities" isDocumented="False" />
<NamespaceSummaryItem name="Newtonsoft.Json.Bson" isDocumented="True">The &lt;b&gt;Newtonsoft.Json.Linq&lt;/b&gt; namespace provides classes that are used to implement BSON.</NamespaceSummaryItem>
</NamespaceSummaries>
<RootNamespaceContainer>True</RootNamespaceContainer>
<RootNamespaceTitle>API Reference</RootNamespaceTitle>
<ComponentConfigurations>
<ComponentConfig id="Post-transform Component" enabled="True">
<component id="Post-transform Component" type="SandcastleBuilder.Components.PostTransformComponent" assembly="{@SHFBFolder}SandcastleBuilder.Components.dll">
<!-- Code colorizer files (required).
Attributes:
Stylesheet file (required)
Script file (required)
"Copy" image file (required) -->
<colorizer stylesheet="{@SHFBFolder}Colorizer\highlight.css" scriptFile="{@SHFBFolder}Colorizer\highlight.js" copyImage="{@SHFBFolder}Colorizer\CopyCode.gif" />
<!-- Base output paths for the files (required). These should match the parent folder of the output path
of the HTML files (see each of the SaveComponent instances in the configuration files). -->
<outputPaths>
{@HelpFormatOutputPaths}
</outputPaths>
<!-- Logo image file (optional). Filename is required. The height, width, altText, placement, and
alignment attributes are optional. -->
<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">
<component id="Code Block Component" type="SandcastleBuilder.Components.CodeBlockComponent" assembly="{@SHFBFolder}SandcastleBuilder.Components.dll">
<basePath value="{@HtmlEncProjectFolder}" />
<languageFilter value="true" />
<allowMissingSource value="false" />
<removeRegionMarkers value="false" />
<colorizer syntaxFile="{@SHFBFolder}Colorizer\highlight.xml" styleFile="{@SHFBFolder}Colorizer\highlight.xsl" copyImageUrl="../icons/CopyCode.gif" language="cs" tabSize="0" numberLines="true" outlining="false" keepSeeTags="false" defaultTitle="true" />
</component>
</ComponentConfig>
<ComponentConfig id="Cached Reflection Index Data" enabled="True">
<component id="Cached Reflection Index Data" type="SandcastleBuilder.Components.CachedCopyFromIndexComponent" assembly="{@SHFBFolder}SandcastleBuilder.Components.dll">
<index name="reflection" value="/reflection/apis/api" key="@id" cache="10">
<cache base="{@SandcastlePath}Data\Reflection" recurse="true" files="*.xml" cacheFile="{@LocalDataFolder}Cache\Reflection.cache" />
<data files="reflection.xml" />
</index>
<copy name="reflection" source="*" target="/document/reference" />
</component>
</ComponentConfig>
<ComponentConfig id="Cached MSDN URL References" enabled="True">
<component id="Cached MSDN URL References" type="SandcastleBuilder.Components.CachedResolveReferenceLinksComponent" assembly="{@SHFBFolder}SandcastleBuilder.Components.dll" locale="{@Locale}" linkTarget="{@SdkLinkTarget}">
<helpOutput format="HtmlHelp1">
<cache filename="{@LocalDataFolder}Cache\MsdnUrl.cache" />
<targets base="{@SandcastlePath}Data\Reflection" recurse="true" files="*.xml" type="{@HtmlSdkLinkType}" />
<targets files="reflection.xml" type="Local" />
</helpOutput>
<helpOutput format="MSHelp2">
<cache filename="{@LocalDataFolder}Cache\MsdnUrl.cache" />
<targets base="{@SandcastlePath}Data\Reflection" recurse="true" files="*.xml" type="{@MSHelp2SdkLinkType}" />
<targets files="reflection.xml" type="Index" />
</helpOutput>
<helpOutput format="MSHelpViewer">
<cache filename="{@LocalDataFolder}Cache\MsdnUrl.cache" />
<targets base="{@SandcastlePath}Data\Reflection" recurse="true" files="*.xml" type="{@MSHelpViewerSdkLinkType}" />
<targets files="reflection.xml" type="Id" />
</helpOutput>
<helpOutput format="Website">
<cache filename="{@LocalDataFolder}Cache\MsdnUrl.cache" />
<targets base="{@SandcastlePath}Data\Reflection" recurse="true" files="*.xml" type="{@WebsiteSdkLinkType}" />
<targets files="reflection.xml" type="Local" />
</helpOutput>
</component>
</ComponentConfig>
<ComponentConfig id="Cached Framework Comments Index Data" enabled="True">
<component id="Cached Framework Comments Index Data" type="SandcastleBuilder.Components.CachedCopyFromIndexComponent" assembly="{@SHFBFolder}SandcastleBuilder.Components.dll">
<index name="comments" value="/doc/members/member" key="@name" cache="100">
{@CachedFrameworkCommentList}
{@CommentFileList}
</index>
<copy name="comments" source="*" target="/document/comments" />
</component>
</ComponentConfig>
</ComponentConfigurations>
<IndentHtml>False</IndentHtml>
</PropertyGroup>
<!-- There are no properties for these two groups but they need to appear in
order for Visual Studio to perform the build. -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
</PropertyGroup>
<ItemGroup>
<Content Include="donate.gif" />
</ItemGroup>
<ItemGroup>
<None Include="ConditionalProperties.aml" />
<None Include="CustomCreationConverter.aml" />
<None Include="ContractResolver.aml" />
<None Include="ConvertingJSONandXML.aml" />
<None Include="CreatingLINQtoJSON.aml" />
<None Include="Performance.aml" />
<None Include="JsonSchema.aml" />
<None Include="JsonSchema.aml" />
<None Include="ParsingLINQtoJSON.aml" />
<None Include="QueryingLINQtoJSON.aml" />
<None Include="ReadingWritingJSON.aml" />
<None Include="SelectToken.aml" />
<None Include="LINQtoJSON.aml" />
<None Include="SerializingJSONFragments.aml" />
<None Include="ReducingSerializedJSONSize.aml" />
<None Include="DatesInJSON.aml" />
<None Include="SerializingCollections.aml" />
<None Include="PreserveObjectReferences.aml" />
<None Include="SerializationErrorHandling.aml" />
<None Include="SerializationCallbacks.aml" />
<None Include="SerializationAttributes.aml" />
<None Include="SerializationGuide.aml" />
<None Include="SerializationSettings.aml" />
<None Include="SerializingJSON.aml" />
<None Include="Introduction.aml" />
</ItemGroup>
<ItemGroup>
<ContentLayout Include="doc.content" />
</ItemGroup>
<ItemGroup>
<Image Include="performance.png">
<ImageId>performance</ImageId>
<AlternateText>performance</AlternateText>
</Image>
<Image Include="logo.jpg">
<ImageId>logo</ImageId>
<AlternateText>logo</AlternateText>
</Image>
</ItemGroup>
<!-- Import the SHFB build targets -->
<Import Project="$(SHFBROOT)\SandcastleHelpFileBuilder.targets" />
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<!-- The configuration and platform will be used to determine which
assemblies to include from solution and project documentation
sources -->
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{fd19f68e-72c8-4576-9775-b4480b0db686}</ProjectGuid>
<SHFBSchemaVersion>1.9.5.0</SHFBSchemaVersion>
<!-- AssemblyName, Name, and RootNamespace are not used by SHFB but Visual
Studio adds them anyway -->
<AssemblyName>Documentation</AssemblyName>
<RootNamespace>Documentation</RootNamespace>
<Name>Documentation</Name>
<!-- SHFB properties -->
<OutputPath>..\Working\Documentation\</OutputPath>
<HtmlHelpName>Documentation</HtmlHelpName>
<ProjectSummary>
</ProjectSummary>
<MissingTags>Summary, Parameter, Returns, AutoDocumentCtors, Namespace, TypeParameter, AutoDocumentDispose</MissingTags>
<VisibleItems>InheritedMembers, InheritedFrameworkMembers, Protected, SealedProtected</VisibleItems>
<HtmlHelp1xCompilerPath>
</HtmlHelp1xCompilerPath>
<HtmlHelp2xCompilerPath>
</HtmlHelp2xCompilerPath>
<SandcastlePath>
</SandcastlePath>
<WorkingPath>
</WorkingPath>
<BuildLogFile>
</BuildLogFile>
<HelpFileFormat>Website</HelpFileFormat>
<FrameworkVersion>.NET Framework 4.0</FrameworkVersion>
<HelpTitle>Json.NET - Documentation</HelpTitle>
<PresentationStyle>vs2005</PresentationStyle>
<NamingMethod>MemberName</NamingMethod>
<DocumentationSourcePath>..\Src\Newtonsoft.Json\bin\Release</DocumentationSourcePath>
<DocumentationSources>
<DocumentationSource sourceFile="$(DocumentationSourcePath)\Newtonsoft.Json.dll" />
<DocumentationSource sourceFile="$(DocumentationSourcePath)\Newtonsoft.Json.xml" />
</DocumentationSources>
<NamespaceSummaries>
<NamespaceSummaryItem name="(global)" isDocumented="False" />
<NamespaceSummaryItem name="Newtonsoft.Json" isDocumented="True">The &lt;b&gt;Newtonsoft.Json&lt;/b&gt; namespace provides classes that are used to implement the core services of the framework.</NamespaceSummaryItem>
<NamespaceSummaryItem name="Newtonsoft.Json.Converters" isDocumented="True">The &lt;b&gt;Newtonsoft.Json.Converters&lt;/b&gt; namespace provides classes that inherit from &lt;a href="T_Newtonsoft_Json_JsonConverter.htm"&gt;JsonConverter&lt;/a&gt;.</NamespaceSummaryItem>
<NamespaceSummaryItem name="Newtonsoft.Json.Linq" isDocumented="True">The &lt;b&gt;Newtonsoft.Json.Linq&lt;/b&gt; namespace provides classes that are used to implement LINQ to JSON.</NamespaceSummaryItem>
<NamespaceSummaryItem name="Newtonsoft.Json.Linq.ComponentModel" isDocumented="True">The &lt;b&gt;Newtonsoft.Json.Linq.ComponentModel&lt;/b&gt; namespace provides classes for LINQ to JSON databinding.</NamespaceSummaryItem>
<NamespaceSummaryItem name="Newtonsoft.Json.Schema" isDocumented="True">The &lt;b&gt;Newtonsoft.Json.Schema&lt;/b&gt; namespace provides classes that are used to implement JSON schema.</NamespaceSummaryItem>
<NamespaceSummaryItem name="Newtonsoft.Json.Serialization" isDocumented="True">The &lt;b&gt;Newtonsoft.Json.Linq&lt;/b&gt; namespace provides classes that are used when serializing and deserializing JSON.</NamespaceSummaryItem>
<NamespaceSummaryItem name="Newtonsoft.Json.Utilities" isDocumented="False" />
<NamespaceSummaryItem name="Newtonsoft.Json.Bson" isDocumented="True">The &lt;b&gt;Newtonsoft.Json.Linq&lt;/b&gt; namespace provides classes that are used to implement BSON.</NamespaceSummaryItem>
</NamespaceSummaries>
<RootNamespaceContainer>True</RootNamespaceContainer>
<RootNamespaceTitle>API Reference</RootNamespaceTitle>
<ComponentConfigurations>
<ComponentConfig id="Post-transform Component" enabled="True">
<component id="Post-transform Component" type="SandcastleBuilder.Components.PostTransformComponent" assembly="{@SHFBFolder}SandcastleBuilder.Components.dll">
<!-- Code colorizer files (required).
Attributes:
Stylesheet file (required)
Script file (required)
"Copy" image file (required) -->
<colorizer stylesheet="{@SHFBFolder}Colorizer\highlight.css" scriptFile="{@SHFBFolder}Colorizer\highlight.js" copyImage="{@SHFBFolder}Colorizer\CopyCode.gif" />
<!-- Base output paths for the files (required). These should match the parent folder of the output path
of the HTML files (see each of the SaveComponent instances in the configuration files). -->
<outputPaths>
{@HelpFormatOutputPaths}
</outputPaths>
<!-- Logo image file (optional). Filename is required. The height, width, altText, placement, and
alignment attributes are optional. -->
<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">
<component id="Code Block Component" type="SandcastleBuilder.Components.CodeBlockComponent" assembly="{@SHFBFolder}SandcastleBuilder.Components.dll">
<basePath value="{@HtmlEncProjectFolder}" />
<languageFilter value="true" />
<allowMissingSource value="false" />
<removeRegionMarkers value="false" />
<colorizer syntaxFile="{@SHFBFolder}Colorizer\highlight.xml" styleFile="{@SHFBFolder}Colorizer\highlight.xsl" copyImageUrl="../icons/CopyCode.gif" language="cs" tabSize="0" numberLines="true" outlining="false" keepSeeTags="false" defaultTitle="true" />
</component>
</ComponentConfig>
<ComponentConfig id="Cached Reflection Index Data" enabled="True">
<component id="Cached Reflection Index Data" type="SandcastleBuilder.Components.CachedCopyFromIndexComponent" assembly="{@SHFBFolder}SandcastleBuilder.Components.dll">
<index name="reflection" value="/reflection/apis/api" key="@id" cache="10">
<cache base="{@SandcastlePath}Data\Reflection" recurse="true" files="*.xml" cacheFile="{@LocalDataFolder}Cache\Reflection.cache" />
<data files="reflection.xml" />
</index>
<copy name="reflection" source="*" target="/document/reference" />
</component>
</ComponentConfig>
<ComponentConfig id="Cached MSDN URL References" enabled="True">
<component id="Cached MSDN URL References" type="SandcastleBuilder.Components.CachedResolveReferenceLinksComponent" assembly="{@SHFBFolder}SandcastleBuilder.Components.dll" locale="{@Locale}" linkTarget="{@SdkLinkTarget}">
<helpOutput format="HtmlHelp1">
<cache filename="{@LocalDataFolder}Cache\MsdnUrl.cache" />
<targets base="{@SandcastlePath}Data\Reflection" recurse="true" files="*.xml" type="{@HtmlSdkLinkType}" />
<targets files="reflection.xml" type="Local" />
</helpOutput>
<helpOutput format="MSHelp2">
<cache filename="{@LocalDataFolder}Cache\MsdnUrl.cache" />
<targets base="{@SandcastlePath}Data\Reflection" recurse="true" files="*.xml" type="{@MSHelp2SdkLinkType}" />
<targets files="reflection.xml" type="Index" />
</helpOutput>
<helpOutput format="MSHelpViewer">
<cache filename="{@LocalDataFolder}Cache\MsdnUrl.cache" />
<targets base="{@SandcastlePath}Data\Reflection" recurse="true" files="*.xml" type="{@MSHelpViewerSdkLinkType}" />
<targets files="reflection.xml" type="Id" />
</helpOutput>
<helpOutput format="Website">
<cache filename="{@LocalDataFolder}Cache\MsdnUrl.cache" />
<targets base="{@SandcastlePath}Data\Reflection" recurse="true" files="*.xml" type="{@WebsiteSdkLinkType}" />
<targets files="reflection.xml" type="Local" />
</helpOutput>
</component>
</ComponentConfig>
<ComponentConfig id="Cached Framework Comments Index Data" enabled="True">
<component id="Cached Framework Comments Index Data" type="SandcastleBuilder.Components.CachedCopyFromIndexComponent" assembly="{@SHFBFolder}SandcastleBuilder.Components.dll">
<index name="comments" value="/doc/members/member" key="@name" cache="100">
{@CachedFrameworkCommentList}
{@CommentFileList}
</index>
<copy name="comments" source="*" target="/document/comments" />
</component>
</ComponentConfig>
</ComponentConfigurations>
<IndentHtml>False</IndentHtml>
</PropertyGroup>
<!-- There are no properties for these two groups but they need to appear in
order for Visual Studio to perform the build. -->
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
</PropertyGroup>
<ItemGroup>
<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" />
<None Include="CreatingLINQtoJSON.aml" />
<None Include="Performance.aml" />
<None Include="JsonSchema.aml" />
<None Include="JsonSchema.aml" />
<None Include="ParsingLINQtoJSON.aml" />
<None Include="QueryingLINQtoJSON.aml" />
<None Include="ReadingWritingJSON.aml" />
<None Include="SelectToken.aml" />
<None Include="LINQtoJSON.aml" />
<None Include="SerializingJSONFragments.aml" />
<None Include="ReducingSerializedJSONSize.aml" />
<None Include="DatesInJSON.aml" />
<None Include="SerializingCollections.aml" />
<None Include="PreserveObjectReferences.aml" />
<None Include="SerializationErrorHandling.aml" />
<None Include="SerializationCallbacks.aml" />
<None Include="SerializationAttributes.aml" />
<None Include="SerializationGuide.aml" />
<None Include="SerializationSettings.aml" />
<None Include="SerializingJSON.aml" />
<None Include="Introduction.aml" />
</ItemGroup>
<ItemGroup>
<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>
</Image>
<Image Include="logo.jpg">
<ImageId>logo</ImageId>
<AlternateText>logo</AlternateText>
</Image>
</ItemGroup>
<!-- Import the SHFB build targets -->
<Import Project="$(SHFBROOT)\SandcastleHelpFileBuilder.targets" />
</Project>
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 537 B

@@ -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
}
}
}
@@ -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();
+10 -12
View File
@@ -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,21 +122,19 @@ namespace Newtonsoft.Json.Tests
TestClass test = CreateSerializationObject();
SerializeTests(test);
Deserialize();
}
private void SerializeTests(object value)
{
BenchmarkSerializeMethod(SerializeMethod.DataContractSerializer, value);
BenchmarkSerializeMethod(SerializeMethod.BinaryFormatter, value);
BenchmarkSerializeMethod(SerializeMethod.JavaScriptSerializer, value);
BenchmarkSerializeMethod(SerializeMethod.DataContractJsonSerializer, value);
BenchmarkSerializeMethod(SerializeMethod.JsonNet, value);
BenchmarkSerializeMethod(SerializeMethod.JsonNetLinq, value);
//BenchmarkSerializeMethod(SerializeMethod.DataContractSerializer, value);
//BenchmarkSerializeMethod(SerializeMethod.BinaryFormatter, value);
//BenchmarkSerializeMethod(SerializeMethod.JavaScriptSerializer, value);
//BenchmarkSerializeMethod(SerializeMethod.DataContractJsonSerializer, value);
//BenchmarkSerializeMethod(SerializeMethod.JsonNet, value);
//BenchmarkSerializeMethod(SerializeMethod.JsonNetLinq, value);
BenchmarkSerializeMethod(SerializeMethod.JsonNetManual, value);
BenchmarkSerializeMethod(SerializeMethod.JsonNetWithIsoConverter, value);
BenchmarkSerializeMethod(SerializeMethod.JsonNetBinary, value);
//BenchmarkSerializeMethod(SerializeMethod.JsonNetWithIsoConverter, value);
//BenchmarkSerializeMethod(SerializeMethod.JsonNetBinary, value);
}
[Test]
@@ -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.15431")]
[assembly: AssemblyFileVersion("4.5.10.15501")]
#endif
+44 -33
View File
@@ -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);
}
+78 -88
View File
@@ -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 }
@@ -157,7 +156,7 @@ namespace Newtonsoft.Json
return JsonPosition.BuildPath(positions);
}
}
/// <summary>
/// Gets the state of the writer.
/// </summary>
@@ -316,10 +315,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>
@@ -327,7 +331,7 @@ namespace Newtonsoft.Json
/// </summary>
public virtual void WriteEndObject()
{
AutoCompleteClose(JsonContainerType.Object);
InternalWriteEnd(JsonContainerType.Object);
}
/// <summary>
@@ -335,9 +339,7 @@ namespace Newtonsoft.Json
/// </summary>
public virtual void WriteStartArray()
{
UpdateScopeWithFinishedValue();
AutoComplete(JsonToken.StartArray);
Push(JsonContainerType.Array);
InternalWriteStart(JsonToken.StartArray, JsonContainerType.Array);
}
/// <summary>
@@ -345,7 +347,7 @@ namespace Newtonsoft.Json
/// </summary>
public virtual void WriteEndArray()
{
AutoCompleteClose(JsonContainerType.Array);
InternalWriteEnd(JsonContainerType.Array);
}
/// <summary>
@@ -354,9 +356,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>
@@ -364,7 +364,12 @@ namespace Newtonsoft.Json
/// </summary>
public virtual void WriteEndConstructor()
{
AutoCompleteClose(JsonContainerType.Constructor);
InternalWriteEnd(JsonContainerType.Constructor);
}
internal void InternalWriteEnd(JsonContainerType container)
{
AutoCompleteClose(container);
}
/// <summary>
@@ -372,6 +377,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);
@@ -564,21 +574,6 @@ namespace Newtonsoft.Json
}
}
private JsonContainerType GetTypeForCloseToken(JsonToken token)
{
switch (token)
{
case JsonToken.EndObject:
return JsonContainerType.Object;
case JsonToken.EndArray:
return JsonContainerType.Array;
case JsonToken.EndConstructor:
return JsonContainerType.Constructor;
default:
throw JsonWriterException.Create(this, "No type for token: " + token, null);
}
}
private JsonToken GetCloseTokenForType(JsonContainerType type)
{
switch (type)
@@ -699,22 +694,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;
@@ -725,6 +714,11 @@ namespace Newtonsoft.Json
/// Writes a null value.
/// </summary>
public virtual void WriteNull()
{
InternalWriteNull();
}
internal void InternalWriteNull()
{
UpdateScopeWithFinishedValue();
AutoComplete(JsonToken.Null);
@@ -734,6 +728,11 @@ namespace Newtonsoft.Json
/// Writes an undefined value.
/// </summary>
public virtual void WriteUndefined()
{
InternalWriteUndefined();
}
internal void InternalWriteUndefined()
{
UpdateScopeWithFinishedValue();
AutoComplete(JsonToken.Undefined);
@@ -744,6 +743,11 @@ namespace Newtonsoft.Json
/// </summary>
/// <param name="json">The raw JSON to write.</param>
public virtual void WriteRaw(string json)
{
InternalWriteRaw();
}
internal void InternalWriteRaw()
{
}
@@ -764,9 +768,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>
@@ -775,8 +784,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>
@@ -786,8 +794,7 @@ namespace Newtonsoft.Json
[CLSCompliant(false)]
public virtual void WriteValue(uint value)
{
UpdateScopeWithFinishedValue();
AutoComplete(JsonToken.Integer);
InternalWriteValue(JsonToken.Integer);
}
/// <summary>
@@ -796,8 +803,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>
@@ -807,8 +813,7 @@ namespace Newtonsoft.Json
[CLSCompliant(false)]
public virtual void WriteValue(ulong value)
{
UpdateScopeWithFinishedValue();
AutoComplete(JsonToken.Integer);
InternalWriteValue(JsonToken.Integer);
}
/// <summary>
@@ -817,8 +822,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>
@@ -827,8 +831,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>
@@ -837,8 +840,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>
@@ -847,8 +849,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>
@@ -858,8 +859,7 @@ namespace Newtonsoft.Json
[CLSCompliant(false)]
public virtual void WriteValue(ushort value)
{
UpdateScopeWithFinishedValue();
AutoComplete(JsonToken.Integer);
InternalWriteValue(JsonToken.Integer);
}
/// <summary>
@@ -868,8 +868,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>
@@ -878,8 +877,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>
@@ -889,8 +887,7 @@ namespace Newtonsoft.Json
[CLSCompliant(false)]
public virtual void WriteValue(sbyte value)
{
UpdateScopeWithFinishedValue();
AutoComplete(JsonToken.Integer);
InternalWriteValue(JsonToken.Integer);
}
/// <summary>
@@ -899,8 +896,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>
@@ -909,8 +905,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
@@ -920,8 +915,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
@@ -931,8 +925,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>
@@ -941,8 +934,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>
@@ -1162,14 +1154,9 @@ namespace Newtonsoft.Json
public virtual void WriteValue(byte[] value)
{
if (value == null)
{
WriteNull();
}
else
{
UpdateScopeWithFinishedValue();
AutoComplete(JsonToken.Bytes);
}
InternalWriteValue(JsonToken.Bytes);
}
/// <summary>
@@ -1179,14 +1166,9 @@ namespace Newtonsoft.Json
public virtual void WriteValue(Uri value)
{
if (value == null)
{
WriteNull();
}
else
{
UpdateScopeWithFinishedValue();
AutoComplete(JsonToken.String);
}
InternalWriteValue(JsonToken.String);
}
/// <summary>
@@ -1297,7 +1279,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);
}
@@ -1306,6 +1292,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)
{
@@ -1314,7 +1305,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.15431")]
[assembly: AssemblyFileVersion("4.5.10.15501")]
#endif
[assembly: CLSCompliant(true)]