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)); }
/// <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"); }