Пример #1
0
        public void MissingMemberDeserializeOkay()
        {
            Product product = new Product();

            product.Name       = "Apple";
            product.ExpiryDate = new DateTime(2008, 12, 28);
            product.Price      = 3.99M;
            product.Sizes      = new string[] { "Small", "Medium", "Large" };

            string output = JsonConvertX.SerializeObject(product);
            //{
            //  "Name": "Apple",
            //  "ExpiryDate": new Date(1230422400000),
            //  "Price": 3.99,
            //  "Sizes": [
            //    "Small",
            //    "Medium",
            //    "Large"
            //  ]
            //}

            JsonSerializer jsonSerializer = new JsonSerializer();

            jsonSerializer.MissingMemberHandling = MissingMemberHandling.Ignore;

            object deserializedValue;

            using (JsonReader jsonReader = new JsonTextReader(new StringReader(output)))
            {
                deserializedValue = jsonSerializer.Deserialize(jsonReader, typeof(ProductShort));
            }

            ProductShort deserializedProductShort = (ProductShort)deserializedValue;

            Assert.AreEqual("Apple", deserializedProductShort.Name);
            Assert.AreEqual(new DateTime(2008, 12, 28), deserializedProductShort.ExpiryDate);
            Assert.AreEqual("Small", deserializedProductShort.Sizes[0]);
            Assert.AreEqual("Medium", deserializedProductShort.Sizes[1]);
            Assert.AreEqual("Large", deserializedProductShort.Sizes[2]);
        }
Пример #2
0
        public void SerializeDynamicObjectWithNullValueHandlingInclude()
        {
            dynamic o = new TestDynamicObject();

            o.Text               = "Text!";
            o.Int                = int.MaxValue;
            o.ChildObject        = null; // Tests an explicitly defined property of a dynamic object with a null value.
            o.DynamicChildObject = null; // vs. a completely dynamic defined property.

            string json = JsonConvertX.SerializeObject(o, Formatting.Indented, new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Include,
            });

            StringAssert.AreEqual(@"{
  ""Explicit"": false,
  ""Text"": ""Text!"",
  ""DynamicChildObject"": null,
  ""Int"": 2147483647,
  ""ChildObject"": null
}", json);
        }
Пример #3
0
        public void ShouldSerializeExample()
        {
            Employee joe = new Employee();

            joe.Name = "Joe Employee";
            Employee mike = new Employee();

            mike.Name = "Mike Manager";

            joe.Manager  = mike;
            mike.Manager = mike;

            string json = JsonConvertX.SerializeObject(new[] { joe, mike }, Formatting.Indented);

            // [
            //   {
            //     "Name": "Joe Employee",
            //     "Manager": {
            //       "Name": "Mike Manager"
            //     }
            //   },
            //   {
            //     "Name": "Mike Manager"
            //   }
            // ]

            StringAssert.AreEqual(@"[
  {
    ""Name"": ""Joe Employee"",
    ""Manager"": {
      ""Name"": ""Mike Manager""
    }
  },
  {
    ""Name"": ""Mike Manager""
  }
]", json);
        }
Пример #4
0
        public void ExtensionDataTest_SerializeWithNamingStrategy_Disabled()
        {
            ExtensionDataTestClass c = new ExtensionDataTestClass()
            {
                ExtensionData = new Dictionary <string, JToken>
                {
                    ["TestValue1"]       = 1,
                    ["alreadyCamelCase"] = new JObject
                    {
                        ["NotProcessed"] = true
                    }
                }
            };

            string json = JsonConvertX.SerializeObject(c, new JsonSerializerSettings
            {
                ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver
                {
                    NamingStrategy = new Newtonsoft.Json.Serialization.CamelCaseNamingStrategy()
                },
                Formatting = Formatting.Indented
            });

            StringAssert.AreEqual(@"{
  ""readonly"": ""Readonly"",
  ""name"": null,
  ""custom_name"": null,
  ""getPrivate"": false,
  ""getOnly"": true,
  ""ints"": [
    0
  ],
  ""TestValue1"": 1,
  ""alreadyCamelCase"": {
    ""NotProcessed"": true
  }
}", json);
        }
Пример #5
0
        public void ExtensionDataDeserializeWithNonDefaultConstructorTest()
        {
            ExtensionDataDeserializeWithNonDefaultConstructor c = new ExtensionDataDeserializeWithNonDefaultConstructor("Name!");

            c._extensionData = new Dictionary <string, JToken>
            {
                { "Key!", "Value!" }
            };

            string json = JsonConvertX.SerializeObject(c, Formatting.Indented);

            StringAssert.AreEqual(@"{
  ""Name"": ""Name!"",
  ""Key!"": ""Value!""
}", json);

            var c2 = JsonConvertX.DeserializeObject <ExtensionDataDeserializeWithNonDefaultConstructor>(json);

            Assert.AreEqual("Name!", c2.Name);
            Assert.IsNotNull(c2._extensionData);
            Assert.AreEqual(1, c2._extensionData.Count);
            Assert.AreEqual("Value!", (string)c2._extensionData["Key!"]);
        }
Пример #6
0
        public void ExtensionDataExample()
        {
            string json = @"{
              'HourlyRate': 150,
              'Hours': 40,
              'TaxRate': 0.125
            }";

            var invoice = JsonConvertX.DeserializeObject <CustomerInvoice>(json);

            // increase tax to 15%
            invoice.TaxRate = 0.15m;

            string result = JsonConvertX.SerializeObject(invoice);

            // {
            //   'TaxRate': 0.15,
            //   'HourlyRate': 150,
            //   'Hours': 40
            // }

            Assert.AreEqual(@"{""TaxRate"":0.15,""HourlyRate"":150,""Hours"":40}", result);
        }
        public void Json_StringEnumConverter_Test()
        {
            var obj = new StringEmumObject()
            {
                Worten = Antworten.Second, My = MyEnum.Value2
            };

            var json   = JsonConvertX.SerializeObject(obj, JsonConvertX.IndentedSettings);
            var newobj = JsonConvertX.DeserializeObject <StringEmumObject>(json, JsonConvertX.DefaultDeserializerSettings);

            Assert.Equal(obj.Worten, newobj.Worten);
            Assert.Equal(obj.My, newobj.My);

            json   = JsonConvertX.SerializeObject(obj, JsonConvertX.IndentedSettings);
            newobj = JsonConvertX.DeserializeObject <StringEmumObject>(json, JsonConvertX.DefaultDeserializerSettings);
            Assert.Equal(obj.Worten, newobj.Worten);
            Assert.Equal(obj.My, newobj.My);

            json   = JsonConvertX.SerializeObject(obj, JsonConvertX.IndentedCamelCaseSettings);
            newobj = JsonConvertX.DeserializeObject <StringEmumObject>(json, JsonConvertX.DefaultDeserializerSettings);
            Assert.Equal(obj.Worten, newobj.Worten);
            Assert.Equal(obj.My, newobj.My);
        }
        public void ListEvents()
        {
            SerializationEventTestList obj = new SerializationEventTestList
            {
                1.1m,
                2.222222222m,
                int.MaxValue,
                Convert.ToDecimal(Math.PI)
            };

            Assert.AreEqual(11, obj.Member1);
            Assert.AreEqual("Hello World!", obj.Member2);
            Assert.AreEqual("This is a nonserialized value", obj.Member3);
            Assert.AreEqual(null, obj.Member4);

            string json = JsonConvertX.SerializeObject(obj, Formatting.Indented);

            StringAssert.AreEqual(@"[
  -1.0,
  1.1,
  2.222222222,
  2147483647.0,
  3.14159265358979
]", json);

            Assert.AreEqual(11, obj.Member1);
            Assert.AreEqual("This value was reset after serialization.", obj.Member2);
            Assert.AreEqual("This is a nonserialized value", obj.Member3);
            Assert.AreEqual(null, obj.Member4);

            obj = JsonConvertX.DeserializeObject <SerializationEventTestList>(json);

            Assert.AreEqual(11, obj.Member1);
            Assert.AreEqual("Hello World!", obj.Member2);
            Assert.AreEqual("This value was set during deserialization", obj.Member3);
            Assert.AreEqual("This value was set after deserialization.", obj.Member4);
        }
        public void SerializeCircularReference()
        {
            CircularReferenceClass c1 = new CircularReferenceClass {
                Name = "c1"
            };
            CircularReferenceClass c2 = new CircularReferenceClass {
                Name = "c2"
            };
            CircularReferenceClass c3 = new CircularReferenceClass {
                Name = "c3"
            };

            c1.Child = c2;
            c2.Child = c3;
            c3.Child = c1;

            string json = JsonConvertX.SerializeObject(c1, Formatting.Indented, new JsonSerializerSettings
            {
                PreserveReferencesHandling = PreserveReferencesHandling.Objects
            });

            StringAssert.AreEqual(@"{
  ""$id"": ""1"",
  ""Name"": ""c1"",
  ""Child"": {
    ""$id"": ""2"",
    ""Name"": ""c2"",
    ""Child"": {
      ""$id"": ""3"",
      ""Name"": ""c3"",
      ""Child"": {
        ""$ref"": ""1""
      }
    }
  }
}", json);
        }
        public void SerializeInvoice()
        {
            Invoice invoice = new Invoice
            {
                Company              = "Acme Ltd.",
                Amount               = 50.0m,
                Paid                 = false,
                FollowUpDays         = 30,
                FollowUpEmailAddress = string.Empty,
                PaidDate             = null
            };

            string included = JsonConvertX.SerializeObject(invoice,
                                                           Formatting.Indented,
                                                           new JsonSerializerSettings {
            });

            StringAssert.AreEqual(@"{
  ""Company"": ""Acme Ltd."",
  ""Amount"": 50.0,
  ""Paid"": false,
  ""PaidDate"": null,
  ""FollowUpDays"": 30,
  ""FollowUpEmailAddress"": """"
}", included);

            string ignored = JsonConvertX.SerializeObject(invoice,
                                                          Formatting.Indented,
                                                          new JsonSerializerSettings {
                DefaultValueHandling = DefaultValueHandling.Ignore
            });

            StringAssert.AreEqual(@"{
  ""Company"": ""Acme Ltd."",
  ""Amount"": 50.0
}", ignored);
        }
        public void DictionaryEvents()
        {
            SerializationEventTestDictionary obj = new SerializationEventTestDictionary
            {
                { 1.1m, "first" },
                { 2.222222222m, "second" },
                { int.MaxValue, "third" },
                { Convert.ToDecimal(Math.PI), "fourth" }
            };

            Assert.AreEqual(11, obj.Member1);
            Assert.AreEqual("Hello World!", obj.Member2);
            Assert.AreEqual("This is a nonserialized value", obj.Member3);
            Assert.AreEqual(null, obj.Member4);

            string json = JsonConvertX.SerializeObject(obj, Formatting.Indented);

            StringAssert.AreEqual(@"{
  ""1.1"": ""first"",
  ""2.222222222"": ""second"",
  ""2147483647"": ""third"",
  ""3.14159265358979"": ""fourth"",
  ""79228162514264337593543950335"": ""Inserted on serializing""
}", json);

            Assert.AreEqual(11, obj.Member1);
            Assert.AreEqual("This value was reset after serialization.", obj.Member2);
            Assert.AreEqual("This is a nonserialized value", obj.Member3);
            Assert.AreEqual(null, obj.Member4);

            obj = JsonConvertX.DeserializeObject <SerializationEventTestDictionary>(json);

            Assert.AreEqual(11, obj.Member1);
            Assert.AreEqual("Hello World!", obj.Member2);
            Assert.AreEqual("This value was set during deserialization", obj.Member3);
            Assert.AreEqual("This value was set after deserialization.", obj.Member4);
        }
Пример #12
0
        public void DictionaryCamelCasePropertyNames_Disabled()
        {
            Dictionary <string, string> values = new Dictionary <string, string>
            {
                { "First", "Value1!" },
                { "Second", "Value2!" }
            };

            DefaultContractResolver contractResolver = new DefaultContractResolver
            {
                NamingStrategy = new CamelCaseNamingStrategy()
            };

            string json = JsonConvertX.SerializeObject(values, Formatting.Indented,
                                                       new JsonSerializerSettings
            {
                ContractResolver = contractResolver
            });

            StringAssert.AreEqual(@"{
  ""First"": ""Value1!"",
  ""Second"": ""Value2!""
}", json);
        }
Пример #13
0
        public void DeserializeGuid()
        {
            Item expected = new Item()
            {
                SourceTypeID = new Guid("d8220a4b-75b1-4b7a-8112-b7bdae956a45"),
                BrokerID     = new Guid("951663c4-924e-4c86-a57a-7ed737501dbd"),
                Latitude     = 33.657145,
                Longitude    = -117.766684,
                TimeStamp    = new DateTime(2000, 3, 1, 23, 59, 59, DateTimeKind.Utc),
                Payload      = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
            };

            string jsonString = JsonConvertX.SerializeObject(expected, Formatting.Indented);

            StringAssert.AreEqual(@"{
  ""SourceTypeID"": ""d8220a4b-75b1-4b7a-8112-b7bdae956a45"",
  ""BrokerID"": ""951663c4-924e-4c86-a57a-7ed737501dbd"",
  ""Latitude"": 33.657145,
  ""Longitude"": -117.766684,
  ""TimeStamp"": ""2000-03-01T23:59:59Z"",
  ""Payload"": {
    ""$type"": """ + ReflectionUtils.GetTypeName(typeof(byte[]), 0, PreserveReferencesHandlingTests._bingderInstance) + @""",
    ""$value"": ""AAECAwQFBgcICQ==""
  }
}", jsonString);

            Item actual = JsonConvertX.DeserializeObject <Item>(jsonString, new JsonSerializerSettings
            {
                MetadataPropertyHandling = MetadataPropertyHandling.ReadAhead
            });

            Assert.AreEqual(new Guid("d8220a4b-75b1-4b7a-8112-b7bdae956a45"), actual.SourceTypeID);
            Assert.AreEqual(new Guid("951663c4-924e-4c86-a57a-7ed737501dbd"), actual.BrokerID);
            byte[] bytes = (byte[])actual.Payload;
            CollectionAssert.AreEquivalent(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, bytes);
        }
Пример #14
0
        public void NullValueHandlingBlogPost()
        {
            Movie movie = new Movie();

            movie.Name        = "Bad Boys III";
            movie.Description = "It's no Bad Boys";

            string included = JsonConvertX.SerializeObject(movie,
                                                           Formatting.Indented,
                                                           new JsonSerializerSettings {
            });

            // {
            //   "Name": "Bad Boys III",
            //   "Description": "It's no Bad Boys",
            //   "Classification": null,
            //   "Studio": null,
            //   "ReleaseDate": null,
            //   "ReleaseCountries": null
            // }

            string ignored = JsonConvertX.SerializeObject(movie,
                                                          Formatting.Indented,
                                                          new JsonSerializerSettings {
                NullValueHandling = NullValueHandling.Ignore
            });

            // {
            //   "Name": "Bad Boys III",
            //   "Description": "It's no Bad Boys"
            // }

            StringAssert.AreEqual(MovieNullValueHandlingIncludeExpectedResult, included);

            StringAssert.AreEqual(MovieNullValueHandlingIgnoreExpectedResult, ignored);
        }
 public string ToJson()
 {
     return(JsonConvertX.SerializeObject(this, Formatting.Indented));
 }
        public void SerializeReadOnlyProperty()
        {
            Child c = new Child
            {
                PropertyName = "value?"
            };
            IList <string> l = new List <string>
            {
                "value!"
            };
            Parent p = new Parent
            {
                Child1 = c,
                Child2 = c,
                List1  = l,
                List2  = l
            };

            string json = JsonConvertX.SerializeObject(p, new JsonSerializerSettings
            {
                Formatting = Formatting.Indented,
                PreserveReferencesHandling = PreserveReferencesHandling.All
            });

            StringAssert.AreEqual(@"{
  ""$id"": ""1"",
  ""ReadOnlyChild"": {
    ""PropertyName"": ""value?""
  },
  ""Child1"": {
    ""$id"": ""2"",
    ""PropertyName"": ""value?""
  },
  ""Child2"": {
    ""$ref"": ""2""
  },
  ""ReadOnlyList"": [
    ""value!""
  ],
  ""List1"": {
    ""$id"": ""3"",
    ""$values"": [
      ""value!""
    ]
  },
  ""List2"": {
    ""$ref"": ""3""
  }
}", json);

            Parent newP = JsonConvertX.DeserializeObject <Parent>(json, new JsonSerializerSettings
            {
                Formatting = Formatting.Indented,
                PreserveReferencesHandling = PreserveReferencesHandling.All
            });

            Assert.AreEqual("value?", newP.Child1.PropertyName);
            Assert.AreEqual(newP.Child1, newP.Child2);
            Assert.AreEqual(newP.Child1, newP.ReadOnlyChild);

            Assert.AreEqual("value!", newP.List1[0]);
            Assert.AreEqual(newP.List1, newP.List2);
            Assert.AreEqual(newP.List1, newP.ReadOnlyList);
        }
Пример #17
0
 public void SerializeDefaultArray()
 {
     ExceptionAssert.Throws <InvalidOperationException>(
         () => JsonConvertX.SerializeObject(default(ImmutableArray <int>), Formatting.Indented),
         "This operation cannot be performed on a default instance of ImmutableArray<T>.  Consider initializing the array, or checking the ImmutableArray<T>.IsDefault property.");
 }
        public void SerializeEntity()
        {
            Folder rootFolder = CreateEntitiesTestData();

            string json = JsonConvertX.SerializeObject(rootFolder, Formatting.Indented, new IsoDateTimeConverter());

            string expected = @"{
  ""$id"": ""1"",
  ""FolderId"": ""a4e8ba80-eb24-4591-bb1c-62d3ad83701e"",
  ""Name"": ""Root folder"",
  ""Description"": ""Description!"",
  ""CreatedDate"": ""2000-12-10T10:50:00Z"",
  ""Files"": [],
  ""ChildFolders"": [
    {
      ""$id"": ""2"",
      ""FolderId"": ""484936e2-7cbb-4592-93ff-b2103e5705e4"",
      ""Name"": ""Child folder"",
      ""Description"": ""Description!"",
      ""CreatedDate"": ""2001-11-20T10:50:00Z"",
      ""Files"": [
        {
          ""$id"": ""3"",
          ""FileId"": ""cc76d734-49f1-4616-bb38-41514228ac6c"",
          ""Name"": ""File 1"",
          ""Description"": ""Description!"",
          ""CreatedDate"": ""2002-10-30T10:50:00Z"",
          ""Folder"": {
            ""$ref"": ""2""
          },
          ""EntityKey"": {
            ""$id"": ""4"",
            ""EntitySetName"": ""File"",
            ""EntityContainerName"": ""DataServicesTestDatabaseEntities"",
            ""EntityKeyValues"": [
              {
                ""Key"": ""FileId"",
                ""Type"": ""System.Guid"",
                ""Value"": ""cc76d734-49f1-4616-bb38-41514228ac6c""
              }
            ]
          }
        }
      ],
      ""ChildFolders"": [],
      ""ParentFolder"": {
        ""$ref"": ""1""
      },
      ""EntityKey"": {
        ""$id"": ""5"",
        ""EntitySetName"": ""Folder"",
        ""EntityContainerName"": ""DataServicesTestDatabaseEntities"",
        ""EntityKeyValues"": [
          {
            ""Key"": ""FolderId"",
            ""Type"": ""System.Guid"",
            ""Value"": ""484936e2-7cbb-4592-93ff-b2103e5705e4""
          }
        ]
      }
    }
  ],
  ""ParentFolder"": null,
  ""EntityKey"": {
    ""$id"": ""6"",
    ""EntitySetName"": ""Folder"",
    ""EntityContainerName"": ""DataServicesTestDatabaseEntities"",
    ""EntityKeyValues"": [
      {
        ""Key"": ""FolderId"",
        ""Type"": ""System.Guid"",
        ""Value"": ""a4e8ba80-eb24-4591-bb1c-62d3ad83701e""
      }
    ]
  }
}";

            StringAssert.AreEqual(expected, json);
        }
        public void SerializeEntityCamelCase()
        {
            Folder rootFolder = CreateEntitiesTestData();

            JsonSerializerSettings settings = new JsonSerializerSettings
            {
                Formatting       = Formatting.Indented,
                ContractResolver = new CamelCasePropertyNamesContractResolver(),
                Converters       = { new IsoDateTimeConverter() }
            };

            string json = JsonConvertX.SerializeObject(rootFolder, settings);

            Console.WriteLine(json);

            string expected = @"{
  ""$id"": ""1"",
  ""folderId"": ""a4e8ba80-eb24-4591-bb1c-62d3ad83701e"",
  ""name"": ""Root folder"",
  ""description"": ""Description!"",
  ""createdDate"": ""2000-12-10T10:50:00Z"",
  ""files"": [],
  ""childFolders"": [
    {
      ""$id"": ""2"",
      ""folderId"": ""484936e2-7cbb-4592-93ff-b2103e5705e4"",
      ""name"": ""Child folder"",
      ""description"": ""Description!"",
      ""createdDate"": ""2001-11-20T10:50:00Z"",
      ""files"": [
        {
          ""$id"": ""3"",
          ""fileId"": ""cc76d734-49f1-4616-bb38-41514228ac6c"",
          ""name"": ""File 1"",
          ""description"": ""Description!"",
          ""createdDate"": ""2002-10-30T10:50:00Z"",
          ""folder"": {
            ""$ref"": ""2""
          },
          ""entityKey"": {
            ""$id"": ""4"",
            ""entitySetName"": ""File"",
            ""entityContainerName"": ""DataServicesTestDatabaseEntities"",
            ""entityKeyValues"": [
              {
                ""key"": ""FileId"",
                ""type"": ""System.Guid"",
                ""value"": ""cc76d734-49f1-4616-bb38-41514228ac6c""
              }
            ]
          }
        }
      ],
      ""childFolders"": [],
      ""parentFolder"": {
        ""$ref"": ""1""
      },
      ""entityKey"": {
        ""$id"": ""5"",
        ""entitySetName"": ""Folder"",
        ""entityContainerName"": ""DataServicesTestDatabaseEntities"",
        ""entityKeyValues"": [
          {
            ""key"": ""FolderId"",
            ""type"": ""System.Guid"",
            ""value"": ""484936e2-7cbb-4592-93ff-b2103e5705e4""
          }
        ]
      }
    }
  ],
  ""parentFolder"": null,
  ""entityKey"": {
    ""$id"": ""6"",
    ""entitySetName"": ""Folder"",
    ""entityContainerName"": ""DataServicesTestDatabaseEntities"",
    ""entityKeyValues"": [
      {
        ""key"": ""FolderId"",
        ""type"": ""System.Guid"",
        ""value"": ""a4e8ba80-eb24-4591-bb1c-62d3ad83701e""
      }
    ]
  }
}";

            StringAssert.AreEqual(expected, json);
        }
Пример #20
0
 public void SerializeExtensionData_NoGetter()
 {
     ExceptionAssert.Throws <JsonException>(
         () => { JsonConvertX.SerializeObject(new DocNoGetter()); },
         "Invalid extension data attribute on 'JsonExtensions.Tests.Serialization.ExtensionDataTests+DocNoGetter'. Member 'Content' must have a getter.");
 }
        public void SerializingErrorIn3DArray()
        {
            ListErrorObject[,,] c = new ListErrorObject[, , ]
            {
                {
                    {
                        new ListErrorObject
                        {
                            Member     = "Value1",
                            ThrowError = "Handle this!",
                            Member2    = "Member1"
                        },
                        new ListErrorObject
                        {
                            Member  = "Value2",
                            Member2 = "Member2"
                        },
                        new ListErrorObject
                        {
                            Member     = "Value3",
                            ThrowError = "Handle that!",
                            Member2    = "Member3"
                        }
                    },
                    {
                        new ListErrorObject
                        {
                            Member     = "Value1",
                            ThrowError = "Handle this!",
                            Member2    = "Member1"
                        },
                        new ListErrorObject
                        {
                            Member  = "Value2",
                            Member2 = "Member2"
                        },
                        new ListErrorObject
                        {
                            Member     = "Value3",
                            ThrowError = "Handle that!",
                            Member2    = "Member3"
                        }
                    }
                }
            };

            string json = JsonConvertX.SerializeObject(c, new JsonSerializerSettings
            {
                Formatting = Formatting.Indented,
                Error      = (s, e) =>
                {
                    if (e.CurrentObject.GetType().IsArray)
                    {
                        e.ErrorContext.Handled = true;
                    }
                }
            });

            StringAssert.AreEqual(@"[
  [
    [
      {
        ""Member"": ""Value1"",
        ""ThrowError"": ""Handle this!"",
        ""Member2"": ""Member1""
      },
      {
        ""Member"": ""Value2""
      },
      {
        ""Member"": ""Value3"",
        ""ThrowError"": ""Handle that!"",
        ""Member2"": ""Member3""
      }
    ],
    [
      {
        ""Member"": ""Value1"",
        ""ThrowError"": ""Handle this!"",
        ""Member2"": ""Member1""
      },
      {
        ""Member"": ""Value2""
      },
      {
        ""Member"": ""Value3"",
        ""ThrowError"": ""Handle that!"",
        ""Member2"": ""Member3""
      }
    ]
  ]
]", json);
        }
Пример #22
0
        public void VirtualShouldSerializeSimple()
        {
            string json = JsonConvertX.SerializeObject(new B());

            Assert.AreEqual("{}", json);
        }
        public void SerializeMultiValueEntityKeyCameCase()
        {
            EntityKey e = new EntityKey("DataServicesTestDatabaseEntities.Folder",
                                        new List <EntityKeyMember>
            {
                new EntityKeyMember("GuidId", new Guid("A4E8BA80-EB24-4591-BB1C-62D3AD83701E")),
                new EntityKeyMember("IntId", int.MaxValue),
                new EntityKeyMember("LongId", long.MaxValue),
                new EntityKeyMember("StringId", "String!"),
                new EntityKeyMember("DateTimeId", new DateTime(2000, 12, 10, 10, 50, 0, DateTimeKind.Utc))
            });

            string json = JsonConvertX.SerializeObject(e, Formatting.Indented);

            StringAssert.AreEqual(@"{
  ""$id"": ""1"",
  ""EntitySetName"": ""Folder"",
  ""EntityContainerName"": ""DataServicesTestDatabaseEntities"",
  ""EntityKeyValues"": [
    {
      ""Key"": ""GuidId"",
      ""Type"": ""System.Guid"",
      ""Value"": ""a4e8ba80-eb24-4591-bb1c-62d3ad83701e""
    },
    {
      ""Key"": ""IntId"",
      ""Type"": ""System.Int32"",
      ""Value"": ""2147483647""
    },
    {
      ""Key"": ""LongId"",
      ""Type"": ""System.Int64"",
      ""Value"": ""9223372036854775807""
    },
    {
      ""Key"": ""StringId"",
      ""Type"": ""System.String"",
      ""Value"": ""String!""
    },
    {
      ""Key"": ""DateTimeId"",
      ""Type"": ""System.DateTime"",
      ""Value"": ""12/10/2000 10:50:00""
    }
  ]
}", json);

            EntityKey newKey = JsonConvertX.DeserializeObject <EntityKey>(json);

            Assert.IsFalse(ReferenceEquals(e, newKey));

            Assert.AreEqual(5, newKey.EntityKeyValues.Length);
            Assert.AreEqual("GuidId", newKey.EntityKeyValues[0].Key);
            Assert.AreEqual(new Guid("A4E8BA80-EB24-4591-BB1C-62D3AD83701E"), newKey.EntityKeyValues[0].Value);
            Assert.AreEqual("IntId", newKey.EntityKeyValues[1].Key);
            Assert.AreEqual(int.MaxValue, newKey.EntityKeyValues[1].Value);
            Assert.AreEqual("LongId", newKey.EntityKeyValues[2].Key);
            Assert.AreEqual(long.MaxValue, newKey.EntityKeyValues[2].Value);
            Assert.AreEqual("StringId", newKey.EntityKeyValues[3].Key);
            Assert.AreEqual("String!", newKey.EntityKeyValues[3].Value);
            Assert.AreEqual("DateTimeId", newKey.EntityKeyValues[4].Key);
            Assert.AreEqual(new DateTime(2000, 12, 10, 10, 50, 0, DateTimeKind.Utc), newKey.EntityKeyValues[4].Value);
        }
        public void JsonObjectTypeDeserializer_Test()
        {
            var dict = new Dictionary <string, object>(StringComparer.Ordinal)
            {
                ["name"]           = "apple",
                ["Age"]            = 18,
                ["Id"]             = Guid.NewGuid(),
                ["createDateTime"] = DateTime.Now,
                ["combGuid"]       = CombGuid.NewComb(),
                ["dtOffset"]       = DateTimeOffset.Now,
                ["double"]         = 10.56d,
                ["float"]          = 20.06f,
                ["decimal"]        = 8.000056M,
                ["bytes"]          = new byte[] { 1 },
                ["emptybytes"]     = new byte[0],
                ["Worten1"]        = 0,
                ["Worten"]         = "second",
            };

            var json    = JsonConvertX.SerializeObject(dict, JsonConvertX.DefaultSettings);
            var newDict = JsonConvertX.DeserializeObject <Dictionary <string, object> >(json, JsonConvertX.DefaultSettings);

            Assert.Equal(dict["name"], JsonObjectTypeDeserializer.Deserialize <string>(newDict, "name"));
            Assert.Equal(dict["Age"], JsonObjectTypeDeserializer.Deserialize <int>(newDict, "Age"));
            Assert.Equal(dict["Id"], JsonObjectTypeDeserializer.Deserialize <Guid>(newDict, "Id"));
            // camelcase key test
            Assert.Equal(dict["createDateTime"], JsonObjectTypeDeserializer.Deserialize <DateTime>(newDict, "CreateDateTime"));
            Assert.Equal(dict["createDateTime"], JsonObjectTypeDeserializer.Deserialize <DateTimeOffset>(newDict, "CreateDateTime").DateTime);
            Assert.Equal(dict["combGuid"], JsonObjectTypeDeserializer.Deserialize <CombGuid>(newDict, "combGuid"));
            Assert.Equal(dict["dtOffset"], JsonObjectTypeDeserializer.Deserialize <DateTimeOffset>(newDict, "dtOffset"));
            Assert.Equal(dict["double"], JsonObjectTypeDeserializer.Deserialize <double>(newDict, "double"));
            Assert.Equal(dict["float"], JsonObjectTypeDeserializer.Deserialize <float>(newDict, "float"));
            Assert.Equal(dict["decimal"], JsonObjectTypeDeserializer.Deserialize <decimal>(newDict, "decimal"));
            Assert.Equal(dict["bytes"], JsonObjectTypeDeserializer.Deserialize <byte[]>(newDict, "bytes"));
            Assert.Equal(dict["emptybytes"], JsonObjectTypeDeserializer.Deserialize <byte[]>(newDict, "emptybytes"));
            Assert.Equal(Antworten.First, JsonObjectTypeDeserializer.Deserialize <Antworten>(newDict, "Worten1"));
            Assert.Equal(Antworten.Second, JsonObjectTypeDeserializer.Deserialize <Antworten>(newDict, "Worten"));

            Assert.Equal(dict["name"], newDict.Deserialize <string>("name"));
            Assert.Equal(dict["Age"], newDict.Deserialize <int>("Age"));
            Assert.Equal(dict["Id"], newDict.Deserialize <Guid>("Id"));
            // camelcase key test
            Assert.Equal(dict["createDateTime"], newDict.Deserialize <DateTime>("CreateDateTime"));
            Assert.Equal(dict["combGuid"], newDict.Deserialize <CombGuid>("combGuid"));
            Assert.Equal(dict["dtOffset"], newDict.Deserialize <DateTimeOffset>("dtOffset"));
            Assert.Equal(dict["double"], newDict.Deserialize <double>("double"));
            Assert.Equal(dict["float"], newDict.Deserialize <float>("float"));
            Assert.Equal(dict["decimal"], newDict.Deserialize <decimal>("decimal"));
            Assert.Equal(dict["bytes"], newDict.Deserialize <byte[]>("bytes"));
            Assert.Equal(dict["emptybytes"], newDict.Deserialize <byte[]>("emptybytes"));

            Assert.Equal(dict["name"], dict.Deserialize <string>("name"));
            Assert.Equal(dict["Age"], dict.Deserialize <int>("Age"));
            Assert.Equal(dict["Id"], dict.Deserialize <Guid>("Id"));
            // camelcase key test
            Assert.Equal(dict["createDateTime"], dict.Deserialize <DateTime>("CreateDateTime"));
            Assert.Equal(dict["combGuid"], dict.Deserialize <CombGuid>("combGuid"));
            Assert.Equal(dict["dtOffset"], dict.Deserialize <DateTimeOffset>("dtOffset"));
            Assert.Equal(dict["double"], dict.Deserialize <double>("double"));
            Assert.Equal(dict["float"], dict.Deserialize <float>("float"));
            Assert.Equal(dict["decimal"], dict.Deserialize <decimal>("decimal"));
            Assert.Equal(dict["bytes"], dict.Deserialize <byte[]>("bytes"));
            Assert.Equal(dict["emptybytes"], dict.Deserialize <byte[]>("emptybytes"));

            var combGuid = CombGuid.NewComb();
            var jsonStr  = combGuid.ToString();

            Assert.Equal(combGuid, JsonObjectTypeDeserializer.Deserialize <CombGuid>(jsonStr));
            Assert.Equal(combGuid, JsonObjectTypeDeserializer.Deserialize <CombGuid>(combGuid));
            Assert.Equal((Guid)combGuid, JsonObjectTypeDeserializer.Deserialize <Guid>(combGuid));
            Assert.Equal(combGuid.ToString(), JsonObjectTypeDeserializer.Deserialize <string>(combGuid));
            Assert.Equal(combGuid.ToByteArray(), JsonObjectTypeDeserializer.Deserialize <byte[]>(combGuid));
            Assert.Equal(combGuid.DateTime, JsonObjectTypeDeserializer.Deserialize <DateTime>(combGuid));
            Assert.Equal(DateTime.UtcNow.Date, JsonObjectTypeDeserializer.Deserialize <DateTime>(combGuid).Date);
            Assert.Equal(new DateTimeOffset(combGuid.DateTime), JsonObjectTypeDeserializer.Deserialize <DateTimeOffset>(combGuid));
        }