From ff5c48660d47b87e1499df928337b520f81725a3 Mon Sep 17 00:00:00 2001 From: JamesNK Date: Sat, 1 Aug 2009 12:06:21 +0000 Subject: [PATCH] -Added .NET 2.0 support -Documentation --- Src/Doc/Introduction.html | 17 +- Src/Doc/SerializingCollections.html | 128 +++++++++++ Src/Doc/doc.shfb | 1 + Src/Doc/doc.sitemap | 3 +- Src/Lib/LinqBridge.dll | Bin 0 -> 64512 bytes Src/Newtonsoft.Json.Net20.sln | 33 +++ .../Converters/BinaryConverterTests.cs | 4 +- .../JsonSerializerTest.cs | 112 +++++++++- .../Newtonsoft.Json.Tests.Compact.csproj | 4 +- .../Newtonsoft.Json.Tests.Net20.csproj | 176 +++++++++++++++ .../Newtonsoft.Json.Tests.Silverlight.csproj | 2 + Src/Newtonsoft.Json.Tests/PerformanceTests.cs | 2 +- .../EntitiesSerializationTests.cs | 2 +- .../SerializationEventAttributeTests.cs | 2 +- Src/Newtonsoft.Json.sln | 1 + .../Converters/BinaryConverter.cs | 10 +- .../Converters/EntityKeyMemberConverter.cs | 2 +- Src/Newtonsoft.Json/JsonConvert.cs | 115 +++++----- Src/Newtonsoft.Json/JsonSerializer.cs | 2 +- Src/Newtonsoft.Json/JsonValidatingReader.cs | 2 +- Src/Newtonsoft.Json/Linq/JValue.cs | 2 +- .../Newtonsoft.Json.Compact.csproj | 6 +- .../Newtonsoft.Json.Net20.csproj | 204 ++++++++++++++++++ .../Newtonsoft.Json.Silverlight.csproj | 6 +- Src/Newtonsoft.Json/Newtonsoft.Json.csproj | 4 +- .../Properties/AssemblyInfo.cs | 5 + .../Serialization/DefaultContractResolver.cs | 28 +-- .../Serialization/JsonTypeReflector.cs | 12 +- .../Utilities/CollectionUtils.cs | 20 +- .../Utilities/DateTimeUtils.cs | 2 +- 30 files changed, 788 insertions(+), 119 deletions(-) create mode 100644 Src/Doc/SerializingCollections.html create mode 100644 Src/Lib/LinqBridge.dll create mode 100644 Src/Newtonsoft.Json.Net20.sln create mode 100644 Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Net20.csproj create mode 100644 Src/Newtonsoft.Json/Newtonsoft.Json.Net20.csproj diff --git a/Src/Doc/Introduction.html b/Src/Doc/Introduction.html index e8a0df02..108cdbbb 100644 --- a/Src/Doc/Introduction.html +++ b/Src/Doc/Introduction.html @@ -17,13 +17,20 @@

Features

+

The JSON serializer is a good choice when the JSON you are reading or writing maps closely + to a .NET class. The serializer automatically reads and writes JSON for the class.

+

+ For situations where you are only interested in getting values from JSON, don't + have a class to serialize or deserialize to, or the JSON is radically different + from your class and you need to manually read and write from your objects then + LINQ to JSON is what you should use. LINQ to JSON allows you to easily read, + create and modify JSON in .NET.

History

diff --git a/Src/Doc/SerializingCollections.html b/Src/Doc/SerializingCollections.html new file mode 100644 index 00000000..7e1dc7b3 --- /dev/null +++ b/Src/Doc/SerializingCollections.html @@ -0,0 +1,128 @@ + + + + Serializing Collections + + + + + + +

+ Json.NET - Quick Starts & API Documentation
+ Serializing Collections
+ +
+ + +

The JsonSerializer has + great support for serializing and deserializing collections of objects.

+ +

Serializing

+

To serialize a collection - a generic list, array, dictionary, or your own custom collection - simply call the serializer with the object you want to get JSON for. + Json.NET will serialize the collection and all of the values it contains.

+ + +
+ +
+
Product p1 = new Product
+
  {
+
    Name = "Product 1",
+
    Price = 99.95m,
+
    ExpiryDate = new DateTime(2000, 12, 29, 0, 0, 0, DateTimeKind.Utc),
+
  };
+
Product p2 = new Product
+
{
+
  Name = "Product 2",
+
  Price = 12.50m,
+
  ExpiryDate = new DateTime(2009, 7, 31, 0, 0, 0, DateTimeKind.Utc),
+
};
+
 
+
List<Product> products = new List<Product>();
+
products.Add(p1);
+
products.Add(p2);
+
 
+
string json = JsonConvert.SerializeObject(products, Formatting.Indented);
+
//[
+
//  {
+
//    "Name": "Product 1",
+
//    "ExpiryDate": "\/Date(978048000000)\/",
+
//    "Price": 99.95,
+
//    "Sizes": null
+
//  },
+
//  {
+
//    "Name": "Product 2",
+
//    "ExpiryDate": "\/Date(1248998400000)\/",
+
//    "Price": 12.50,
+
//    "Sizes": null
+
//  }
+
//]
+
+ +
+ +

Deserializing

+

To deserialize JSON into a .NET collection just specify the collection type you want to deserialize to. Json.NET supports a wide range of collection types.

+ +
+ +
+
string json = @"[
+
  {
+
    ""Name"": ""Product 1"",
+
    ""ExpiryDate"": ""\/Date(978048000000)\/"",
+
    ""Price"": 99.95,
+
    ""Sizes"": null
+
  },
+
  {
+
    ""Name"": ""Product 2"",
+
    ""ExpiryDate"": ""\/Date(1248998400000)\/"",
+
    ""Price"": 12.50,
+
    ""Sizes"": null
+
  }
+
]";
+
 
+
List<Product> products = JsonConvert.DeserializeObject<List<Product>>(json);
+
 
+
Console.WriteLine(products.Count);
+
// 2
+
 
+
Product p1 = products[0];
+
 
+
Console.WriteLine(p1.Name);
+
// Product 1
+
+ +
+ +

Deserializing Dictionaries

+ +

Using Json.NET you can also deserialize a JSON object into a .NET generic dictionary. The JSON object's property names and values will be added to the dictionary.

+ +
+ +
+
string json = @"{""key1"":""value1"",""key2"":""value2""}";
+
 
+
Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
+
 
+
Console.WriteLine(values.Count);
+
// 2
+
 
+
Console.WriteLine(values["key1"]);
+
// value1
+
+ +
+ + +
+ + + + \ No newline at end of file diff --git a/Src/Doc/doc.shfb b/Src/Doc/doc.shfb index d6ba72b3..543b5e5c 100644 --- a/Src/Doc/doc.shfb +++ b/Src/Doc/doc.shfb @@ -24,6 +24,7 @@ + Summary, Parameter, Returns, AutoDocumentCtors, Namespace, TypeParameter diff --git a/Src/Doc/doc.sitemap b/Src/Doc/doc.sitemap index e0c17bfb..f00d7646 100644 --- a/Src/Doc/doc.sitemap +++ b/Src/Doc/doc.sitemap @@ -3,7 +3,8 @@ - + + diff --git a/Src/Lib/LinqBridge.dll b/Src/Lib/LinqBridge.dll new file mode 100644 index 0000000000000000000000000000000000000000..305c9bb4cee7b686694742fa9b505b3011317d5c GIT binary patch literal 64512 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 literal 0 HcmV?d00001 diff --git a/Src/Newtonsoft.Json.Net20.sln b/Src/Newtonsoft.Json.Net20.sln new file mode 100644 index 00000000..3e5ce173 --- /dev/null +++ b/Src/Newtonsoft.Json.Net20.sln @@ -0,0 +1,33 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Lib", "Lib", "{620042D9-2753-48F5-BEDE-3905248781D2}" + ProjectSection(SolutionItems) = preProject + Lib\LinqBridge.dll = Lib\LinqBridge.dll + Lib\nunit.framework.dll = Lib\nunit.framework.dll + Lib\nunit.framework.xml = Lib\nunit.framework.xml + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Newtonsoft.Json.Net20", "Newtonsoft.Json\Newtonsoft.Json.Net20.csproj", "{A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Newtonsoft.Json.Tests.Net20", "Newtonsoft.Json.Tests\Newtonsoft.Json.Tests.Net20.csproj", "{3E6E2335-B079-4B5B-A65A-9D586914BCBB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Release|Any CPU.Build.0 = Release|Any CPU + {3E6E2335-B079-4B5B-A65A-9D586914BCBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3E6E2335-B079-4B5B-A65A-9D586914BCBB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3E6E2335-B079-4B5B-A65A-9D586914BCBB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3E6E2335-B079-4B5B-A65A-9D586914BCBB}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Src/Newtonsoft.Json.Tests/Converters/BinaryConverterTests.cs b/Src/Newtonsoft.Json.Tests/Converters/BinaryConverterTests.cs index daf2c921..1af3384d 100644 --- a/Src/Newtonsoft.Json.Tests/Converters/BinaryConverterTests.cs +++ b/Src/Newtonsoft.Json.Tests/Converters/BinaryConverterTests.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -#if !SILVERLIGHT && !PocketPC +#if !SILVERLIGHT && !PocketPC && !NET20 using System.Data.Linq; #endif #if !SILVERLIGHT @@ -24,7 +24,7 @@ namespace Newtonsoft.Json.Tests.Converters public byte[] NullByteArray { get; set; } } -#if !SILVERLIGHT && !PocketPC +#if !SILVERLIGHT && !PocketPC && !NET20 [Test] public void DeserializeBinaryClass() { diff --git a/Src/Newtonsoft.Json.Tests/JsonSerializerTest.cs b/Src/Newtonsoft.Json.Tests/JsonSerializerTest.cs index 7424f73a..00c2f086 100644 --- a/Src/Newtonsoft.Json.Tests/JsonSerializerTest.cs +++ b/Src/Newtonsoft.Json.Tests/JsonSerializerTest.cs @@ -25,7 +25,7 @@ using System; using System.Collections.Generic; -#if !SILVERLIGHT && !PocketPC +#if !SILVERLIGHT && !PocketPC && !NET20 using System.ComponentModel.DataAnnotations; #endif using System.Text; @@ -39,7 +39,7 @@ using System.Collections.ObjectModel; using Newtonsoft.Json.Linq; using System.Linq; using Newtonsoft.Json.Converters; -#if !PocketPC +#if !PocketPC && !NET20 using System.Runtime.Serialization.Json; #endif using Newtonsoft.Json.Tests.TestObjects; @@ -473,7 +473,7 @@ keyword such as type of business."" Assert.AreEqual("Large", deserializedProductShort.Sizes[2]); } -#if !PocketPC +#if !PocketPC && !NET20 [Test] public void Unicode() { @@ -1542,7 +1542,7 @@ keyword such as type of business."" Assert.AreEqual("titleId", n.FidOrder[n.FidOrder.Count - 1]); } -#if !SILVERLIGHT && !PocketPC +#if !SILVERLIGHT && !PocketPC && !NET20 [MetadataType(typeof(OptInClassMetadata))] public class OptInClass { @@ -1587,7 +1587,7 @@ keyword such as type of business."" } #endif -#if !PocketPC +#if !PocketPC && !NET20 [DataContract] public class DataContractPrivateMembers { @@ -1938,5 +1938,107 @@ keyword such as type of business."" Assert.AreEqual(1, ((JObject)o.Data[2]).Count); Assert.AreEqual(1, (int)((JObject)o.Data[2])["one"]); } + + [Test] + public void DeserializeGenericDictionary() + { + string json = @"{""key1"":""value1"",""key2"":""value2""}"; + + Dictionary values = JsonConvert.DeserializeObject>(json); + + Console.WriteLine(values.Count); + // 2 + + Console.WriteLine(values["key1"]); + // value1 + + Assert.AreEqual(2, values.Count); + Assert.AreEqual("value1", values["key1"]); + Assert.AreEqual("value2", values["key2"]); + } + + [Test] + public void SerializeGenericList() + { + Product p1 = new Product + { + Name = "Product 1", + Price = 99.95m, + ExpiryDate = new DateTime(2000, 12, 29, 0, 0, 0, DateTimeKind.Utc), + }; + Product p2 = new Product + { + Name = "Product 2", + Price = 12.50m, + ExpiryDate = new DateTime(2009, 7, 31, 0, 0, 0, DateTimeKind.Utc), + }; + + List products = new List(); + products.Add(p1); + products.Add(p2); + + string json = JsonConvert.SerializeObject(products, Formatting.Indented); + //[ + // { + // "Name": "Product 1", + // "ExpiryDate": "\/Date(978048000000)\/", + // "Price": 99.95, + // "Sizes": null + // }, + // { + // "Name": "Product 2", + // "ExpiryDate": "\/Date(1248998400000)\/", + // "Price": 12.50, + // "Sizes": null + // } + //] + + Assert.AreEqual(@"[ + { + ""Name"": ""Product 1"", + ""ExpiryDate"": ""\/Date(978048000000)\/"", + ""Price"": 99.95, + ""Sizes"": null + }, + { + ""Name"": ""Product 2"", + ""ExpiryDate"": ""\/Date(1248998400000)\/"", + ""Price"": 12.50, + ""Sizes"": null + } +]", json); + } + + [Test] + public void DeserializeGenericList() + { + string json = @"[ + { + ""Name"": ""Product 1"", + ""ExpiryDate"": ""\/Date(978048000000)\/"", + ""Price"": 99.95, + ""Sizes"": null + }, + { + ""Name"": ""Product 2"", + ""ExpiryDate"": ""\/Date(1248998400000)\/"", + ""Price"": 12.50, + ""Sizes"": null + } + ]"; + + List products = JsonConvert.DeserializeObject>(json); + + Console.WriteLine(products.Count); + // 2 + + Product p1 = products[0]; + + Console.WriteLine(p1.Name); + // Product 1 + + Assert.AreEqual(2, products.Count); + Assert.AreEqual("Product 1", products[0].Name); + } } } \ No newline at end of file diff --git a/Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Compact.csproj b/Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Compact.csproj index 3df20233..c7957baf 100644 --- a/Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Compact.csproj +++ b/Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Compact.csproj @@ -7,7 +7,7 @@ {32EA9694-4FB3-43E9-A6AD-050F1D35EA0A} Library Properties - Newtonsoft.Json.Tests.Compact + Newtonsoft.Json.Tests Newtonsoft.Json.Tests.Compact {4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} PocketPC @@ -24,7 +24,7 @@ full false bin\Debug\ - DEBUG;TRACE;$(PlatformFamilyName) + TRACE;DEBUG;PocketPC true true prompt diff --git a/Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Net20.csproj b/Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Net20.csproj new file mode 100644 index 00000000..bf45f0a2 --- /dev/null +++ b/Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Net20.csproj @@ -0,0 +1,176 @@ + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {3E6E2335-B079-4B5B-A65A-9D586914BCBB} + Library + Properties + Newtonsoft.Json.Tests + Newtonsoft.Json.Tests.Net20 + + + + + + + + + + + 2.0 + + + v2.0 + false + + + + + + + true + full + false + bin\Debug\ + TRACE;DEBUG;NET20 + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\Lib\LinqBridge.dll + + + False + ..\Lib\nunit.framework.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D} + Newtonsoft.Json.Net20 + + + + + \ No newline at end of file diff --git a/Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Silverlight.csproj b/Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Silverlight.csproj index a6547f9c..e644b76d 100644 --- a/Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Silverlight.csproj +++ b/Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Silverlight.csproj @@ -65,6 +65,8 @@ + + diff --git a/Src/Newtonsoft.Json.Tests/PerformanceTests.cs b/Src/Newtonsoft.Json.Tests/PerformanceTests.cs index fdc76e27..7bb208aa 100644 --- a/Src/Newtonsoft.Json.Tests/PerformanceTests.cs +++ b/Src/Newtonsoft.Json.Tests/PerformanceTests.cs @@ -1,4 +1,4 @@ -#if !SILVERLIGHT && !PocketPC +#if !SILVERLIGHT && !PocketPC && !NET20 using System; using System.Collections.Generic; using System.Globalization; diff --git a/Src/Newtonsoft.Json.Tests/Serialization/EntitiesSerializationTests.cs b/Src/Newtonsoft.Json.Tests/Serialization/EntitiesSerializationTests.cs index 5c40037d..2150e6ee 100644 --- a/Src/Newtonsoft.Json.Tests/Serialization/EntitiesSerializationTests.cs +++ b/Src/Newtonsoft.Json.Tests/Serialization/EntitiesSerializationTests.cs @@ -23,7 +23,7 @@ // OTHER DEALINGS IN THE SOFTWARE. #endregion -#if !PocketPC && !SILVERLIGHT +#if !PocketPC && !SILVERLIGHT && !NET20 using System; using System.Collections.Generic; using System.Data; diff --git a/Src/Newtonsoft.Json.Tests/Serialization/SerializationEventAttributeTests.cs b/Src/Newtonsoft.Json.Tests/Serialization/SerializationEventAttributeTests.cs index 9ff471f8..e0b018e0 100644 --- a/Src/Newtonsoft.Json.Tests/Serialization/SerializationEventAttributeTests.cs +++ b/Src/Newtonsoft.Json.Tests/Serialization/SerializationEventAttributeTests.cs @@ -23,7 +23,7 @@ // OTHER DEALINGS IN THE SOFTWARE. #endregion -#if !PocketPC && !SILVERLIGHT +#if !PocketPC && !SILVERLIGHT && !NET20 using System; using System.Collections.Generic; using System.IO; diff --git a/Src/Newtonsoft.Json.sln b/Src/Newtonsoft.Json.sln index e5baa538..5414e8fa 100644 --- a/Src/Newtonsoft.Json.sln +++ b/Src/Newtonsoft.Json.sln @@ -26,6 +26,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Doc", "Doc", "{8F9E13D9-418 Doc\ReadingWritingJSON.html = Doc\ReadingWritingJSON.html Doc\SerializationAttributes.html = Doc\SerializationAttributes.html Doc\SerializationCallbacks.html = Doc\SerializationCallbacks.html + Doc\SerializingCollections.html = Doc\SerializingCollections.html Doc\SerializingJSON.html = Doc\SerializingJSON.html Doc\styles.css = Doc\styles.css EndProjectSection diff --git a/Src/Newtonsoft.Json/Converters/BinaryConverter.cs b/Src/Newtonsoft.Json/Converters/BinaryConverter.cs index 354b48f3..32e159de 100644 --- a/Src/Newtonsoft.Json/Converters/BinaryConverter.cs +++ b/Src/Newtonsoft.Json/Converters/BinaryConverter.cs @@ -25,7 +25,7 @@ using System; using System.Collections.Generic; -#if !SILVERLIGHT && !PocketPC +#if !SILVERLIGHT && !PocketPC && !NET20 using System.Data.Linq; #endif #if !SILVERLIGHT @@ -67,7 +67,7 @@ namespace Newtonsoft.Json.Converters private byte[] GetByteArray(object value) { -#if !SILVERLIGHT && !PocketPC +#if !SILVERLIGHT && !PocketPC && !NET20 if (value is Binary) return ((Binary)value).ToArray(); #endif @@ -109,11 +109,11 @@ namespace Newtonsoft.Json.Converters if (t == typeof(byte[])) return data; -#if !SILVERLIGHT && !PocketPC +#if !SILVERLIGHT && !PocketPC && !NET20 if (typeof(Binary).IsAssignableFrom(t)) return new Binary(data); #endif -#if !SILVERLIGHT +#if !SILVERLIGHT if (typeof(SqlBinary).IsAssignableFrom(t)) return new SqlBinary(data); #endif @@ -136,7 +136,7 @@ namespace Newtonsoft.Json.Converters if (t == typeof(byte[])) return true; -#if !SILVERLIGHT && !PocketPC +#if !SILVERLIGHT && !PocketPC && !NET20 if (typeof(Binary).IsAssignableFrom(t)) return true; #endif diff --git a/Src/Newtonsoft.Json/Converters/EntityKeyMemberConverter.cs b/Src/Newtonsoft.Json/Converters/EntityKeyMemberConverter.cs index 84943966..031f3101 100644 --- a/Src/Newtonsoft.Json/Converters/EntityKeyMemberConverter.cs +++ b/Src/Newtonsoft.Json/Converters/EntityKeyMemberConverter.cs @@ -23,7 +23,7 @@ // OTHER DEALINGS IN THE SOFTWARE. #endregion -#if !PocketPC && !SILVERLIGHT +#if !PocketPC && !SILVERLIGHT && !NET20 using System; using System.Collections.Generic; using System.Linq; diff --git a/Src/Newtonsoft.Json/JsonConvert.cs b/Src/Newtonsoft.Json/JsonConvert.cs index ae1b1532..d62395e5 100644 --- a/Src/Newtonsoft.Json/JsonConvert.cs +++ b/Src/Newtonsoft.Json/JsonConvert.cs @@ -24,13 +24,8 @@ #endregion using System; -using System.Collections.Generic; -using System.Text; -using System.Collections; using System.IO; using System.Globalization; -using System.Runtime.Serialization; -using System.Reflection; using Newtonsoft.Json.Utilities; using System.Xml; using Newtonsoft.Json.Converters; @@ -95,27 +90,27 @@ namespace Newtonsoft.Json } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(DateTime value) { TimeSpan utcOffset; -#if PocketPC - utcOffset = TimeZone.CurrentTimeZone.GetUtcOffset(value); -#else +#if !PocketPC && !NET20 utcOffset = TimeZoneInfo.Local.GetUtcOffset(value); +#else + utcOffset = TimeZone.CurrentTimeZone.GetUtcOffset(value); #endif return ToStringInternal(value, utcOffset, value.Kind); } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(DateTimeOffset value) { return ToStringInternal(value.UtcDateTime, value.Offset, DateTimeKind.Local); @@ -143,10 +138,7 @@ namespace Newtonsoft.Json { DateTime utcDateTime = dateTime.ToUniversalTime(); - //if (utcDateTime < MinimumJavaScriptDate) - // utcDateTime = MinimumJavaScriptDate; - - long javaScriptTicks = (utcDateTime.Ticks - InitialJavaScriptDateTicks) / (long)10000; + long javaScriptTicks = (utcDateTime.Ticks - InitialJavaScriptDateTicks) / 10000; return javaScriptTicks; } @@ -159,110 +151,110 @@ namespace Newtonsoft.Json } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(bool value) { return (value) ? True : False; } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(char value) { return ToString(char.ToString(value)); } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(Enum value) { return value.ToString("D"); } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(int value) { return value.ToString(null, CultureInfo.InvariantCulture); } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(short value) { return value.ToString(null, CultureInfo.InvariantCulture); } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(ushort value) { return value.ToString(null, CultureInfo.InvariantCulture); } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(uint value) { return value.ToString(null, CultureInfo.InvariantCulture); } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(long value) { return value.ToString(null, CultureInfo.InvariantCulture); } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(ulong value) { return value.ToString(null, CultureInfo.InvariantCulture); } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(float value) { return EnsureDecimalPlace(value, value.ToString("R", CultureInfo.InvariantCulture)); } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(double value) { return EnsureDecimalPlace(value, value.ToString("R", CultureInfo.InvariantCulture)); @@ -285,80 +277,79 @@ namespace Newtonsoft.Json } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(byte value) { return value.ToString(null, CultureInfo.InvariantCulture); } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(sbyte value) { return value.ToString(null, CultureInfo.InvariantCulture); } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(decimal value) { return EnsureDecimalPlace(value.ToString(null, CultureInfo.InvariantCulture)); } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(Guid value) { return '"' + value.ToString("D", CultureInfo.InvariantCulture) + '"'; } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(string value) { return ToString(value, '"'); } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. /// The string delimiter character. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(string value, char delimter) { return JavaScriptUtils.ToEscapedJavaScriptString(value, delimter, true); } /// - /// Converts the to it's JavaScript string representation. + /// Converts the to its JSON string representation. /// /// The value to convert. - /// A Json string representation of the . + /// A JSON string representation of the . public static string ToString(object value) { if (value == null) - { return Null; - } - else if (value is IConvertible) + + if (value is IConvertible) { - IConvertible convertible = value as IConvertible; + IConvertible convertible = (IConvertible)value; switch (convertible.GetTypeCode()) { @@ -407,12 +398,11 @@ namespace Newtonsoft.Json internal static bool IsJsonPrimitive(object value) { if (value == null) - { return true; - } - else if (value is IConvertible) + + if (value is IConvertible) { - IConvertible convertible = value as IConvertible; + IConvertible convertible = (IConvertible)value; switch (convertible.GetTypeCode()) { @@ -437,10 +427,9 @@ namespace Newtonsoft.Json return false; } } - else if (value is DateTimeOffset) - { + + if (value is DateTimeOffset) return true; - } return false; } diff --git a/Src/Newtonsoft.Json/JsonSerializer.cs b/Src/Newtonsoft.Json/JsonSerializer.cs index 3fb5503b..76309c9c 100644 --- a/Src/Newtonsoft.Json/JsonSerializer.cs +++ b/Src/Newtonsoft.Json/JsonSerializer.cs @@ -54,7 +54,7 @@ namespace Newtonsoft.Json private static readonly IList BuiltInConverters = new List { -#if !PocketPC && !SILVERLIGHT +#if !PocketPC && !SILVERLIGHT && !NET20 new EntityKeyMemberConverter() #endif }; diff --git a/Src/Newtonsoft.Json/JsonValidatingReader.cs b/Src/Newtonsoft.Json/JsonValidatingReader.cs index bcf0358a..0899c2d2 100644 --- a/Src/Newtonsoft.Json/JsonValidatingReader.cs +++ b/Src/Newtonsoft.Json/JsonValidatingReader.cs @@ -268,7 +268,7 @@ namespace Newtonsoft.Json if (schema.Enum != null) { - if (!schema.Enum.Contains(value, new JTokenEqualityComparer())) + if (!schema.Enum.ContainsValue(value, new JTokenEqualityComparer())) RaiseError("Value {0} is not defined in enum.".FormatWith(CultureInfo.InvariantCulture, value), schema); } diff --git a/Src/Newtonsoft.Json/Linq/JValue.cs b/Src/Newtonsoft.Json/Linq/JValue.cs index d564efe1..01d435e5 100644 --- a/Src/Newtonsoft.Json/Linq/JValue.cs +++ b/Src/Newtonsoft.Json/Linq/JValue.cs @@ -217,7 +217,7 @@ namespace Newtonsoft.Json.Linq else if (value is bool) return JTokenType.Boolean; - throw new ArgumentException("Could not determin JSON object type for type {0}.".FormatWith(CultureInfo.InvariantCulture, value.GetType())); + throw new ArgumentException("Could not determine JSON object type for type {0}.".FormatWith(CultureInfo.InvariantCulture, value.GetType())); } private static JTokenType GetStringValueType(JTokenType? current) diff --git a/Src/Newtonsoft.Json/Newtonsoft.Json.Compact.csproj b/Src/Newtonsoft.Json/Newtonsoft.Json.Compact.csproj index 09b9b7ff..c44903bf 100644 --- a/Src/Newtonsoft.Json/Newtonsoft.Json.Compact.csproj +++ b/Src/Newtonsoft.Json/Newtonsoft.Json.Compact.csproj @@ -7,7 +7,7 @@ {256AA604-F61B-4B6D-8D51-C8E6AB11E435} Library Properties - Newtonsoft.Json.Compact + Newtonsoft.Json Newtonsoft.Json.Compact {4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} PocketPC @@ -31,6 +31,8 @@ 512 4 Off + + pdbonly @@ -43,7 +45,7 @@ 512 4 Off - bin\Release\Newtonsoft.Json.Compact.XML + bin\Release\Newtonsoft.Json.Compact.xml diff --git a/Src/Newtonsoft.Json/Newtonsoft.Json.Net20.csproj b/Src/Newtonsoft.Json/Newtonsoft.Json.Net20.csproj new file mode 100644 index 00000000..e8306d94 --- /dev/null +++ b/Src/Newtonsoft.Json/Newtonsoft.Json.Net20.csproj @@ -0,0 +1,204 @@ + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D} + Library + Properties + Newtonsoft.Json + Newtonsoft.Json.Net20 + false + + + + + + + + + + + + + 2.0 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + v2.0 + + + + + true + full + false + bin\Debug\ + TRACE;DEBUG;NET20 + prompt + 4 + bin\Debug\Newtonsoft.Json.Net20.xml + true + -Microsoft.Design#CA1012;-Microsoft.Design#CA2210;-Microsoft.Design#CA1040;-Microsoft.Design#CA1005;-Microsoft.Design#CA1020;-Microsoft.Design#CA1021;-Microsoft.Design#CA1010;-Microsoft.Design#CA1011;-Microsoft.Design#CA1009;-Microsoft.Design#CA1050;-Microsoft.Design#CA1026;-Microsoft.Design#CA1019;-Microsoft.Design#CA1031;-Microsoft.Design#CA1047;-Microsoft.Design#CA1000;-Microsoft.Design#CA1048;-Microsoft.Design#CA1051;-Microsoft.Design#CA1002;-Microsoft.Design#CA1061;-Microsoft.Design#CA1006;-Microsoft.Design#CA1046;-Microsoft.Design#CA1045;-Microsoft.Design#CA1065;-Microsoft.Design#CA1038;-Microsoft.Design#CA1008;-Microsoft.Design#CA1028;-Microsoft.Design#CA1064;-Microsoft.Design#CA1004;-Microsoft.Design#CA1035;-Microsoft.Design#CA1063;-Microsoft.Design#CA1032;-Microsoft.Design#CA1023;-Microsoft.Design#CA1033;-Microsoft.Design#CA1039;-Microsoft.Design#CA1016;-Microsoft.Design#CA1014;-Microsoft.Design#CA1017;-Microsoft.Design#CA1018;-Microsoft.Design#CA1027;-Microsoft.Design#CA1059;-Microsoft.Design#CA1060;-Microsoft.Design#CA1034;-Microsoft.Design#CA1013;-Microsoft.Design#CA1036;-Microsoft.Design#CA1044;-Microsoft.Design#CA1041;-Microsoft.Design#CA1025;-Microsoft.Design#CA1052;-Microsoft.Design#CA1053;-Microsoft.Design#CA1057;-Microsoft.Design#CA1058;-Microsoft.Design#CA1001;-Microsoft.Design#CA1049;-Microsoft.Design#CA1054;-Microsoft.Design#CA1056;-Microsoft.Design#CA1055;-Microsoft.Design#CA1030;-Microsoft.Design#CA1003;-Microsoft.Design#CA1007;-Microsoft.Design#CA1043;-Microsoft.Design#CA1024;-Microsoft.Globalization#CA1301;-Microsoft.Globalization#CA1302;-Microsoft.Globalization#CA1308;-Microsoft.Globalization#CA1306;-Microsoft.Globalization#CA2101;-Microsoft.Globalization#CA1300;-Microsoft.Globalization#CA1307;-Microsoft.Globalization#CA1309;-Microsoft.Interoperability#CA1403;-Microsoft.Interoperability#CA1406;-Microsoft.Interoperability#CA1413;-Microsoft.Interoperability#CA1402;-Microsoft.Interoperability#CA1407;-Microsoft.Interoperability#CA1404;-Microsoft.Interoperability#CA1410;-Microsoft.Interoperability#CA1411;-Microsoft.Interoperability#CA1405;-Microsoft.Interoperability#CA1409;-Microsoft.Interoperability#CA1415;-Microsoft.Interoperability#CA1408;-Microsoft.Interoperability#CA1414;-Microsoft.Interoperability#CA1412;-Microsoft.Interoperability#CA1400;-Microsoft.Interoperability#CA1401;-Microsoft.Maintainability#CA1506;-Microsoft.Maintainability#CA1502;-Microsoft.Maintainability#CA1501;-Microsoft.Maintainability#CA1505;-Microsoft.Maintainability#CA1504;-Microsoft.Maintainability#CA1500;-Microsoft.Mobility#CA1600;-Microsoft.Mobility#CA1601;-Microsoft.Naming#CA1702;-Microsoft.Naming#CA1700;-Microsoft.Naming#CA1712;-Microsoft.Naming#CA1713;-Microsoft.Naming#CA1714;-Microsoft.Naming#CA1709;-Microsoft.Naming#CA1704;-Microsoft.Naming#CA1708;-Microsoft.Naming#CA1715;-Microsoft.Naming#CA1710;-Microsoft.Naming#CA1720;-Microsoft.Naming#CA1707;-Microsoft.Naming#CA1722;-Microsoft.Naming#CA1711;-Microsoft.Naming#CA1716;-Microsoft.Naming#CA1717;-Microsoft.Naming#CA1725;-Microsoft.Naming#CA1719;-Microsoft.Naming#CA1721;-Microsoft.Naming#CA1701;-Microsoft.Naming#CA1703;-Microsoft.Naming#CA1724;-Microsoft.Naming#CA1726;-Microsoft.Performance#CA1809;-Microsoft.Performance#CA1811;-Microsoft.Performance#CA1812;-Microsoft.Performance#CA1813;-Microsoft.Performance#CA1823;-Microsoft.Performance#CA1800;-Microsoft.Performance#CA1805;-Microsoft.Performance#CA1810;-Microsoft.Performance#CA1824;-Microsoft.Performance#CA1822;-Microsoft.Performance#CA1815;-Microsoft.Performance#CA1814;-Microsoft.Performance#CA1819;-Microsoft.Performance#CA1821;-Microsoft.Performance#CA1804;-Microsoft.Performance#CA1820;-Microsoft.Performance#CA1802;-Microsoft.Portability#CA1901;-Microsoft.Portability#CA1900;-Microsoft.Reliability#CA2001;-Microsoft.Reliability#CA2002;-Microsoft.Reliability#CA2003;-Microsoft.Reliability#CA2004;-Microsoft.Reliability#CA2006;-Microsoft.Security#CA2116;-Microsoft.Security#CA2117;-Microsoft.Security#CA2105;-Microsoft.Security#CA2115;-Microsoft.Security#CA2102;-Microsoft.Security#CA2104;-Microsoft.Security#CA2122;-Microsoft.Security#CA2114;-Microsoft.Security#CA2123;-Microsoft.Security#CA2111;-Microsoft.Security#CA2108;-Microsoft.Security#CA2107;-Microsoft.Security#CA2103;-Microsoft.Security#CA2118;-Microsoft.Security#CA2109;-Microsoft.Security#CA2119;-Microsoft.Security#CA2106;-Microsoft.Security#CA2112;-Microsoft.Security#CA2120;-Microsoft.Security#CA2121;-Microsoft.Security#CA2126;-Microsoft.Security#CA2124;-Microsoft.Security#CA2127;-Microsoft.Security#CA2128;-Microsoft.Security#CA2129;-Microsoft.Usage#CA2243;-Microsoft.Usage#CA2236;-Microsoft.Usage#CA1816;-Microsoft.Usage#CA2227;-Microsoft.Usage#CA2213;-Microsoft.Usage#CA2216;-Microsoft.Usage#CA2214;-Microsoft.Usage#CA2222;-Microsoft.Usage#CA1806;-Microsoft.Usage#CA2217;-Microsoft.Usage#CA2212;-Microsoft.Usage#CA2219;-Microsoft.Usage#CA2201;-Microsoft.Usage#CA2228;-Microsoft.Usage#CA2221;-Microsoft.Usage#CA2220;-Microsoft.Usage#CA2240;-Microsoft.Usage#CA2229;-Microsoft.Usage#CA2238;-Microsoft.Usage#CA2207;-Microsoft.Usage#CA2208;-Microsoft.Usage#CA2235;-Microsoft.Usage#CA2237;-Microsoft.Usage#CA2232;-Microsoft.Usage#CA2223;-Microsoft.Usage#CA2211;-Microsoft.Usage#CA2233;-Microsoft.Usage#CA2225;-Microsoft.Usage#CA2226;-Microsoft.Usage#CA2231;-Microsoft.Usage#CA2224;-Microsoft.Usage#CA2218;-Microsoft.Usage#CA2234;-Microsoft.Usage#CA2239;-Microsoft.Usage#CA2200;-Microsoft.Usage#CA1801;-Microsoft.Usage#CA2242;-Microsoft.Usage#CA2205;-Microsoft.Usage#CA2230 + + + pdbonly + true + bin\Release\ + TRACE;NET20 + prompt + 4 + bin\Release\Newtonsoft.Json.Net20.xml + + + + False + ..\Lib\LinqBridge.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + \ No newline at end of file diff --git a/Src/Newtonsoft.Json/Newtonsoft.Json.Silverlight.csproj b/Src/Newtonsoft.Json/Newtonsoft.Json.Silverlight.csproj index 4d9d40b4..4cf3632b 100644 --- a/Src/Newtonsoft.Json/Newtonsoft.Json.Silverlight.csproj +++ b/Src/Newtonsoft.Json/Newtonsoft.Json.Silverlight.csproj @@ -8,7 +8,7 @@ {A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} Library Properties - Newtonsoft.Json.Silverlight + Newtonsoft.Json Newtonsoft.Json.Silverlight v3.5 false @@ -25,7 +25,7 @@ true prompt 4 - Bin\Debug\Newtonsoft.Json.Silverlight.XML + Bin\Debug\Newtonsoft.Json.Silverlight.xml pdbonly @@ -36,7 +36,7 @@ true prompt 4 - Bin\Release\Newtonsoft.Json.Silverlight.XML + Bin\Release\Newtonsoft.Json.Silverlight.xml diff --git a/Src/Newtonsoft.Json/Newtonsoft.Json.csproj b/Src/Newtonsoft.Json/Newtonsoft.Json.csproj index f4a1afd6..9e7613e9 100644 --- a/Src/Newtonsoft.Json/Newtonsoft.Json.csproj +++ b/Src/Newtonsoft.Json/Newtonsoft.Json.csproj @@ -50,7 +50,7 @@ DEBUG;TRACE prompt 4 - bin\Debug\Newtonsoft.Json.XML + bin\Debug\Newtonsoft.Json.xml true -Microsoft.Design#CA1012;-Microsoft.Design#CA2210;-Microsoft.Design#CA1040;-Microsoft.Design#CA1005;-Microsoft.Design#CA1020;-Microsoft.Design#CA1021;-Microsoft.Design#CA1010;-Microsoft.Design#CA1011;-Microsoft.Design#CA1009;-Microsoft.Design#CA1050;-Microsoft.Design#CA1026;-Microsoft.Design#CA1019;-Microsoft.Design#CA1031;-Microsoft.Design#CA1047;-Microsoft.Design#CA1000;-Microsoft.Design#CA1048;-Microsoft.Design#CA1051;-Microsoft.Design#CA1002;-Microsoft.Design#CA1061;-Microsoft.Design#CA1006;-Microsoft.Design#CA1046;-Microsoft.Design#CA1045;-Microsoft.Design#CA1065;-Microsoft.Design#CA1038;-Microsoft.Design#CA1008;-Microsoft.Design#CA1028;-Microsoft.Design#CA1064;-Microsoft.Design#CA1004;-Microsoft.Design#CA1035;-Microsoft.Design#CA1063;-Microsoft.Design#CA1032;-Microsoft.Design#CA1023;-Microsoft.Design#CA1033;-Microsoft.Design#CA1039;-Microsoft.Design#CA1016;-Microsoft.Design#CA1014;-Microsoft.Design#CA1017;-Microsoft.Design#CA1018;-Microsoft.Design#CA1027;-Microsoft.Design#CA1059;-Microsoft.Design#CA1060;-Microsoft.Design#CA1034;-Microsoft.Design#CA1013;-Microsoft.Design#CA1036;-Microsoft.Design#CA1044;-Microsoft.Design#CA1041;-Microsoft.Design#CA1025;-Microsoft.Design#CA1052;-Microsoft.Design#CA1053;-Microsoft.Design#CA1057;-Microsoft.Design#CA1058;-Microsoft.Design#CA1001;-Microsoft.Design#CA1049;-Microsoft.Design#CA1054;-Microsoft.Design#CA1056;-Microsoft.Design#CA1055;-Microsoft.Design#CA1030;-Microsoft.Design#CA1003;-Microsoft.Design#CA1007;-Microsoft.Design#CA1043;-Microsoft.Design#CA1024;-Microsoft.Globalization#CA1301;-Microsoft.Globalization#CA1302;-Microsoft.Globalization#CA1308;-Microsoft.Globalization#CA1306;-Microsoft.Globalization#CA2101;-Microsoft.Globalization#CA1300;-Microsoft.Globalization#CA1307;-Microsoft.Globalization#CA1309;-Microsoft.Interoperability#CA1403;-Microsoft.Interoperability#CA1406;-Microsoft.Interoperability#CA1413;-Microsoft.Interoperability#CA1402;-Microsoft.Interoperability#CA1407;-Microsoft.Interoperability#CA1404;-Microsoft.Interoperability#CA1410;-Microsoft.Interoperability#CA1411;-Microsoft.Interoperability#CA1405;-Microsoft.Interoperability#CA1409;-Microsoft.Interoperability#CA1415;-Microsoft.Interoperability#CA1408;-Microsoft.Interoperability#CA1414;-Microsoft.Interoperability#CA1412;-Microsoft.Interoperability#CA1400;-Microsoft.Interoperability#CA1401;-Microsoft.Maintainability#CA1506;-Microsoft.Maintainability#CA1502;-Microsoft.Maintainability#CA1501;-Microsoft.Maintainability#CA1505;-Microsoft.Maintainability#CA1504;-Microsoft.Maintainability#CA1500;-Microsoft.Mobility#CA1600;-Microsoft.Mobility#CA1601;-Microsoft.Naming#CA1702;-Microsoft.Naming#CA1700;-Microsoft.Naming#CA1712;-Microsoft.Naming#CA1713;-Microsoft.Naming#CA1714;-Microsoft.Naming#CA1709;-Microsoft.Naming#CA1704;-Microsoft.Naming#CA1708;-Microsoft.Naming#CA1715;-Microsoft.Naming#CA1710;-Microsoft.Naming#CA1720;-Microsoft.Naming#CA1707;-Microsoft.Naming#CA1722;-Microsoft.Naming#CA1711;-Microsoft.Naming#CA1716;-Microsoft.Naming#CA1717;-Microsoft.Naming#CA1725;-Microsoft.Naming#CA1719;-Microsoft.Naming#CA1721;-Microsoft.Naming#CA1701;-Microsoft.Naming#CA1703;-Microsoft.Naming#CA1724;-Microsoft.Naming#CA1726;-Microsoft.Performance#CA1809;-Microsoft.Performance#CA1811;-Microsoft.Performance#CA1812;-Microsoft.Performance#CA1813;-Microsoft.Performance#CA1823;-Microsoft.Performance#CA1800;-Microsoft.Performance#CA1805;-Microsoft.Performance#CA1810;-Microsoft.Performance#CA1824;-Microsoft.Performance#CA1822;-Microsoft.Performance#CA1815;-Microsoft.Performance#CA1814;-Microsoft.Performance#CA1819;-Microsoft.Performance#CA1821;-Microsoft.Performance#CA1804;-Microsoft.Performance#CA1820;-Microsoft.Performance#CA1802;-Microsoft.Portability#CA1901;-Microsoft.Portability#CA1900;-Microsoft.Reliability#CA2001;-Microsoft.Reliability#CA2002;-Microsoft.Reliability#CA2003;-Microsoft.Reliability#CA2004;-Microsoft.Reliability#CA2006;-Microsoft.Security#CA2116;-Microsoft.Security#CA2117;-Microsoft.Security#CA2105;-Microsoft.Security#CA2115;-Microsoft.Security#CA2102;-Microsoft.Security#CA2104;-Microsoft.Security#CA2122;-Microsoft.Security#CA2114;-Microsoft.Security#CA2123;-Microsoft.Security#CA2111;-Microsoft.Security#CA2108;-Microsoft.Security#CA2107;-Microsoft.Security#CA2103;-Microsoft.Security#CA2118;-Microsoft.Security#CA2109;-Microsoft.Security#CA2119;-Microsoft.Security#CA2106;-Microsoft.Security#CA2112;-Microsoft.Security#CA2120;-Microsoft.Security#CA2121;-Microsoft.Security#CA2126;-Microsoft.Security#CA2124;-Microsoft.Security#CA2127;-Microsoft.Security#CA2128;-Microsoft.Security#CA2129;-Microsoft.Usage#CA2243;-Microsoft.Usage#CA2236;-Microsoft.Usage#CA1816;-Microsoft.Usage#CA2227;-Microsoft.Usage#CA2213;-Microsoft.Usage#CA2216;-Microsoft.Usage#CA2214;-Microsoft.Usage#CA2222;-Microsoft.Usage#CA1806;-Microsoft.Usage#CA2217;-Microsoft.Usage#CA2212;-Microsoft.Usage#CA2219;-Microsoft.Usage#CA2201;-Microsoft.Usage#CA2228;-Microsoft.Usage#CA2221;-Microsoft.Usage#CA2220;-Microsoft.Usage#CA2240;-Microsoft.Usage#CA2229;-Microsoft.Usage#CA2238;-Microsoft.Usage#CA2207;-Microsoft.Usage#CA2208;-Microsoft.Usage#CA2235;-Microsoft.Usage#CA2237;-Microsoft.Usage#CA2232;-Microsoft.Usage#CA2223;-Microsoft.Usage#CA2211;-Microsoft.Usage#CA2233;-Microsoft.Usage#CA2225;-Microsoft.Usage#CA2226;-Microsoft.Usage#CA2231;-Microsoft.Usage#CA2224;-Microsoft.Usage#CA2218;-Microsoft.Usage#CA2234;-Microsoft.Usage#CA2239;-Microsoft.Usage#CA2200;-Microsoft.Usage#CA1801;-Microsoft.Usage#CA2242;-Microsoft.Usage#CA2205;-Microsoft.Usage#CA2230 @@ -61,7 +61,7 @@ TRACE prompt 4 - bin\Release\Newtonsoft.Json.XML + bin\Release\Newtonsoft.Json.xml diff --git a/Src/Newtonsoft.Json/Properties/AssemblyInfo.cs b/Src/Newtonsoft.Json/Properties/AssemblyInfo.cs index cf7a32cc..2bfd2394 100644 --- a/Src/Newtonsoft.Json/Properties/AssemblyInfo.cs +++ b/Src/Newtonsoft.Json/Properties/AssemblyInfo.cs @@ -29,6 +29,9 @@ using System.Security; [assembly: AssemblyTitle("Newtonsoft Json.NET Silverlight")] #elif PocketPC [assembly: AssemblyTitle("Newtonsoft Json.NET Compact")] +#elif NET20 +[assembly: AssemblyTitle("Newtonsoft Json.NET .NET 2.0")] +[assembly: AllowPartiallyTrustedCallers] #else [assembly: AssemblyTitle("Newtonsoft Json.NET")] [assembly: AllowPartiallyTrustedCallers] @@ -40,6 +43,8 @@ using System.Security; [assembly: InternalsVisibleTo("Newtonsoft.Json.Tests.Silverlight")] #elif PocketPC [assembly: InternalsVisibleTo("Newtonsoft.Json.Tests.Compact")] +#elif NET20 +[assembly: InternalsVisibleTo("Newtonsoft.Json.Tests.Net20")] #else [assembly: InternalsVisibleTo("Newtonsoft.Json.Tests")] #endif diff --git a/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs b/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs index 9a71bb16..482ea5bf 100644 --- a/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs +++ b/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs @@ -32,7 +32,7 @@ using System.Linq; using System.Reflection; using System.Runtime.Serialization; using Newtonsoft.Json.Utilities; -#if !PocketPC && !SILVERLIGHT +#if !PocketPC && !SILVERLIGHT && !NET20 using System.Data.Objects.DataClasses; #endif @@ -80,10 +80,10 @@ namespace Newtonsoft.Json.Serialization /// The serializable members for the type. protected virtual List GetSerializableMembers(Type objectType) { -#if !PocketPC +#if !PocketPC && !NET20 DataContractAttribute dataContractAttribute = JsonTypeReflector.GetDataContractAttribute(objectType); #endif - + List defaultMembers = ReflectionUtils.GetFieldsAndProperties(objectType, DefaultMembersSearchFlags); List allMembers = ReflectionUtils.GetFieldsAndProperties(objectType, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); @@ -98,14 +98,14 @@ namespace Newtonsoft.Json.Serialization { if (JsonTypeReflector.GetAttribute(member) != null) serializableMembers.Add(member); -#if !PocketPC +#if !PocketPC && !NET20 else if (dataContractAttribute != null && JsonTypeReflector.GetAttribute(member) != null) serializableMembers.Add(member); #endif } } -#if !PocketPC && !SILVERLIGHT +#if !PocketPC && !SILVERLIGHT && !NET20 // don't include EntityKey on entities objects... this is a bit hacky if (typeof(EntityObject).IsAssignableFrom(objectType)) serializableMembers = serializableMembers.Where(ShouldSerializeEntityMember).ToList(); @@ -114,7 +114,7 @@ namespace Newtonsoft.Json.Serialization return serializableMembers; } -#if !PocketPC && !SILVERLIGHT +#if !PocketPC && !SILVERLIGHT && !NET20 private bool ShouldSerializeEntityMember(MemberInfo memberInfo) { PropertyInfo propertyInfo = memberInfo as PropertyInfo; @@ -151,7 +151,7 @@ namespace Newtonsoft.Json.Serialization { contract.IsReference = containerAttribute._isReference; } -#if !PocketPC +#if !PocketPC && !NET20 else { DataContractAttribute dataContractAttribute = JsonTypeReflector.GetDataContractAttribute(contract.UnderlyingType); @@ -161,7 +161,7 @@ namespace Newtonsoft.Json.Serialization } #endif -#if !PocketPC && !SILVERLIGHT +#if !PocketPC && !SILVERLIGHT && !NET20 foreach (MethodInfo method in contract.UnderlyingType.GetMethods(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)) { Type prevAttributeType = null; @@ -231,7 +231,7 @@ namespace Newtonsoft.Json.Serialization return CreateObjectContract(objectType); } -#if !PocketPC && !SILVERLIGHT +#if !PocketPC && !SILVERLIGHT && !NET20 private static bool IsValidCallback(MethodInfo method, ParameterInfo[] parameters, Type attributeType, MethodInfo currentCallback, ref Type prevAttributeType) { if (!method.IsDefined(attributeType, false)) @@ -301,7 +301,7 @@ namespace Newtonsoft.Json.Serialization JsonProperty property = new JsonProperty(); property.Member = member; -#if !PocketPC +#if !PocketPC && !NET20 DataContractAttribute dataContractAttribute = JsonTypeReflector.GetDataContractAttribute(member.DeclaringType); DataMemberAttribute dataMemberAttribute; @@ -317,7 +317,7 @@ namespace Newtonsoft.Json.Serialization string mappedName; if (propertyAttribute != null && propertyAttribute.PropertyName != null) mappedName = propertyAttribute.PropertyName; -#if !PocketPC +#if !PocketPC && !NET20 else if (dataMemberAttribute != null && dataMemberAttribute.Name != null) mappedName = dataMemberAttribute.Name; #endif @@ -328,7 +328,7 @@ namespace Newtonsoft.Json.Serialization if (propertyAttribute != null) property.Required = propertyAttribute.IsRequired; -#if !PocketPC +#if !PocketPC && !NET20 else if (dataMemberAttribute != null) property.Required = dataMemberAttribute.IsRequired; #endif @@ -338,10 +338,10 @@ namespace Newtonsoft.Json.Serialization property.Ignored = (hasIgnoreAttribute || (contract.MemberSerialization == MemberSerialization.OptIn && propertyAttribute == null -#if !PocketPC +#if !PocketPC && !NET20 && dataMemberAttribute == null #endif - )); +)); property.Readable = ReflectionUtils.CanReadMemberValue(member); property.Writable = ReflectionUtils.CanSetMemberValue(member); diff --git a/Src/Newtonsoft.Json/Serialization/JsonTypeReflector.cs b/Src/Newtonsoft.Json/Serialization/JsonTypeReflector.cs index 8f3bc5e2..6694d52d 100644 --- a/Src/Newtonsoft.Json/Serialization/JsonTypeReflector.cs +++ b/Src/Newtonsoft.Json/Serialization/JsonTypeReflector.cs @@ -24,7 +24,7 @@ #endregion using System; -#if !SILVERLIGHT && !PocketPC +#if !SILVERLIGHT && !PocketPC && !NET20 using System.ComponentModel.DataAnnotations; #endif using System.Globalization; @@ -43,7 +43,7 @@ namespace Newtonsoft.Json.Serialization public const string ArrayValuesPropertyName = "$values"; private static readonly ThreadSafeStore ConverterTypeCache = new ThreadSafeStore(GetConverterTypeFromAttribute); -#if !SILVERLIGHT && !PocketPC +#if !SILVERLIGHT && !PocketPC && !NET20 private static readonly ThreadSafeStore AssociatedMetadataTypesCache = new ThreadSafeStore(GetAssociateMetadataTypeFromAttribute); #endif @@ -57,7 +57,7 @@ namespace Newtonsoft.Json.Serialization return GetJsonContainerAttribute(type) as JsonObjectAttribute; } -#if !PocketPC +#if !PocketPC && !NET20 public static DataContractAttribute GetDataContractAttribute(Type type) { return CachedAttributeGetter.GetAttribute(type); @@ -70,13 +70,13 @@ namespace Newtonsoft.Json.Serialization if (objectAttribute == null) { -#if !PocketPC +#if !PocketPC && !NET20 DataContractAttribute dataContractAttribute = GetDataContractAttribute(objectType); if (dataContractAttribute != null) return MemberSerialization.OptIn; #endif - + return MemberSerialization.OptOut; } @@ -113,7 +113,7 @@ namespace Newtonsoft.Json.Serialization return null; } -#if !SILVERLIGHT && !PocketPC +#if !SILVERLIGHT && !PocketPC && !NET20 private static Type GetAssociatedMetadataType(Type type) { return AssociatedMetadataTypesCache.Get(type); diff --git a/Src/Newtonsoft.Json/Utilities/CollectionUtils.cs b/Src/Newtonsoft.Json/Utilities/CollectionUtils.cs index 15feeb83..d6e03adc 100644 --- a/Src/Newtonsoft.Json/Utilities/CollectionUtils.cs +++ b/Src/Newtonsoft.Json/Utilities/CollectionUtils.cs @@ -580,13 +580,31 @@ namespace Newtonsoft.Json.Utilities public static bool AddDistinct(this IList list, T value, IEqualityComparer comparer) { - if (list.Contains(value, comparer)) + if (list.ContainsValue(value, comparer)) return false; list.Add(value); return true; } + // this is here because LINQ Bridge doesn't support Contains with IEqualityComparer + public static bool ContainsValue(this IEnumerable source, TSource value, IEqualityComparer comparer) + { + if (comparer == null) + comparer = EqualityComparer.Default; + + if (source == null) + throw new ArgumentNullException("source"); + + foreach (TSource local in source) + { + if (comparer.Equals(local, value)) + return true; + } + + return false; + } + public static bool AddRangeDistinct(this IList list, IEnumerable values) { return list.AddRangeDistinct(values, EqualityComparer.Default); diff --git a/Src/Newtonsoft.Json/Utilities/DateTimeUtils.cs b/Src/Newtonsoft.Json/Utilities/DateTimeUtils.cs index cb4bf15b..21100cd8 100644 --- a/Src/Newtonsoft.Json/Utilities/DateTimeUtils.cs +++ b/Src/Newtonsoft.Json/Utilities/DateTimeUtils.cs @@ -12,7 +12,7 @@ namespace Newtonsoft.Json.Utilities public static string GetLocalOffset(this DateTime d) { TimeSpan utcOffset; -#if PocketPC +#if PocketPC || NET20 utcOffset = TimeZone.CurrentTimeZone.GetUtcOffset(d); #else utcOffset = TimeZoneInfo.Local.GetUtcOffset(d);