예제 #1
0
        public async Task <IRelationshipObject> Deserialize(JsonReader reader, string currentPath)
        {
            if (reader.TokenType != JsonToken.StartObject)
            {
                throw new DeserializationException("Invalid relationship object", "Expected an object, but found " + reader.TokenType, currentPath);
            }

            IResourceLinkage linkage  = null;
            IMetadata        metadata = null;

            while (reader.Read())
            {
                if (reader.TokenType == JsonToken.EndObject)
                {
                    break;
                }

                var propertyName = (string)reader.Value;
                reader.Read();
                switch (propertyName)
                {
                case LinkageKeyName:
                    linkage = await ResourceLinkageFormatter.Deserialize(reader, currentPath + "/" + LinkageKeyName);

                    break;

                case MetaKeyName:
                    metadata = await MetadataFormatter.Deserialize(reader, currentPath + "/" + MetaKeyName);

                    break;
                }
            }

            return(new RelationshipObject(linkage, metadata));
        }
예제 #2
0
 /// <summary>
 /// Serializes the relationship object's linkage.
 /// </summary>
 protected virtual void SerializeLinkage(IRelationshipObject relationshipObject, JsonWriter writer)
 {
     if (relationshipObject.Linkage != null)
     {
         writer.WritePropertyName(LinkageKeyName);
         ResourceLinkageFormatter.Serialize(relationshipObject.Linkage, writer);
     }
 }
        public async Task Serialize_null_toOne_linkage()
        {
            var linkageObject = new Mock<IResourceLinkage>(MockBehavior.Strict);
            linkageObject.Setup(l => l.IsToMany).Returns(false);
            linkageObject.Setup(l => l.Identifiers).Returns(new IResourceIdentifier[] { });

            var formatter = new ResourceLinkageFormatter();
            await AssertSerializeOutput(formatter, linkageObject.Object, "Json/Fixtures/ResourceLinkageFormatter/Serialize_null_toOne_linkage.json");
        }
        public async Task Serialize_present_toMany_linkage()
        {
            var linkageObject = new Mock<IResourceLinkage>(MockBehavior.Strict);
            linkageObject.Setup(l => l.IsToMany).Returns(true);
            linkageObject.Setup(l => l.Identifiers)
                .Returns(new IResourceIdentifier[] { new ResourceIdentifier("countries", "11000"), new ResourceIdentifier("cities", "4100") });

            var formatter = new ResourceLinkageFormatter();
            await AssertSerializeOutput(formatter, linkageObject.Object, "Json/Fixtures/ResourceLinkageFormatter/Serialize_present_toMany_linkage.json");
        }
        public void Deserialize_null_to_one_linkage()
        {
            // Arrange

            // Act
            var formatter = new ResourceLinkageFormatter();
            var linkage =
                GetDeserializedOutput<IResourceLinkageFormatter, IResourceLinkage>(formatter,
                    "Json/Fixtures/ResourceLinkageFormatter/Deserialize_null_to_one_linkage.json").Result;

            // Assert
            linkage.IsToMany.Should().BeFalse();
            linkage.Identifiers.Length.Should().Be(0);
        }
        public void Deserialize_to_many_linkage()
        {
            // Arrange

            // Act
            var formatter = new ResourceLinkageFormatter();
            var linkage =
                GetDeserializedOutput<IResourceLinkageFormatter, IResourceLinkage>(formatter,
                    "Json/Fixtures/ResourceLinkageFormatter/Deserialize_to_many_linkage.json").Result;

            // Assert
            linkage.IsToMany.Should().BeTrue();
            linkage.Identifiers[0].Type.Should().Be("posts");
            linkage.Identifiers[0].Id.Should().Be("12");
            linkage.Identifiers[1].Type.Should().Be("comments");
            linkage.Identifiers[1].Id.Should().Be("9510");
        }
        public void Deserialize_fails_on_integer()
        {
            // Arrange

            // Act
            var formatter = new ResourceLinkageFormatter();

            Func<Task> action = () => GetDeserializedOutput<IResourceLinkageFormatter, IResourceLinkage>(formatter,
                "Json/Fixtures/ResourceLinkageFormatter/Deserialize_fails_on_integer.json");

            // Assert
            action.ShouldThrow<DeserializationException>().WithMessage("Expected an array, object, or null for linkage, but got Integer");
        }