Skip to content

Commit

Permalink
Fixed SystemTextJson indexed properties handling.
Browse files Browse the repository at this point in the history
  • Loading branch information
ViktoriiaZheliezniak committed Jun 7, 2024
1 parent 083501d commit 2684544
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
using NJsonSchema.Generation;
Expand All @@ -24,6 +25,56 @@ public class ClassWithJsonElementExtensionData
public IDictionary<string, JsonElement> ExtensionData { get; set; }
}

public class ClassWithIndexedProperty
{
public double X { get; set; }
public double Y { get; set; }

public double this[int indexer]
{
get
{
switch (indexer)
{
case 0: return X;
case 1: return Y;
default: throw new ArgumentOutOfRangeException(nameof(indexer));
}
}
set
{
switch (indexer)
{
case 0: X = value; break;
case 1: Y = value; break;
default: throw new ArgumentOutOfRangeException(nameof(indexer));
}
}
}

public double this[string indexer]
{
get
{
switch (indexer)
{
case "X": return X;
case "Y": return Y;
default: throw new ArgumentOutOfRangeException(nameof(indexer));
}
}
set
{
switch (indexer)
{
case "X": X = value; break;
case "Y": Y = value; break;
default: throw new ArgumentOutOfRangeException(nameof(indexer));
}
}
}
}

[Fact]
public void SystemTextJson_When_class_has_object_Dictionary_with_JsonExtensionDataAttribute_on_property_then_AdditionalProperties_schema_is_set()
{
Expand Down Expand Up @@ -53,5 +104,19 @@ public void SystemTextJson_When_class_has_JsonElement_Dictionary_with_JsonExtens
Assert.True(schema.AllowAdditionalProperties);
Assert.True(schema.AdditionalPropertiesSchema.ActualSchema.IsAnyType);
}

[Fact]
public void SystemTextJson_When_class_has_Indexed_properties_then_Generates_schema_without_them()
{
// Act
var schema = JsonSchemaGenerator.FromType<ClassWithIndexedProperty>(new SystemTextJsonSchemaGeneratorSettings
{
SchemaType = SchemaType.JsonSchema
});

// Assert
Assert.Equal(2, schema.ActualProperties.Count);
Assert.All(schema.ActualProperties, property => Assert.False(string.Equals(property.Key, "Item", StringComparison.InvariantCultureIgnoreCase)));
}
}
}
6 changes: 6 additions & 0 deletions src/NJsonSchema/Generation/SystemTextJsonReflectionService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,12 @@ public override void GenerateProperties(JsonSchema schema, ContextualType contex
continue;
}

if (accessorInfo.MemberInfo is PropertyInfo propInfo &&
propInfo.GetIndexParameters().Length > 0)
{
continue;
}

var propertyIgnored = false;
var jsonIgnoreAttribute = accessorInfo
.GetAttributes(true)
Expand Down

0 comments on commit 2684544

Please sign in to comment.