Closed EdwardCooke closed 1 day ago
You can do this with a custom type inspector.
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.TypeInspectors;
var data = new Receiver();
var serializer = new SerializerBuilder()
.WithTypeInspector(inner=>new IgnoreTypeTypeInspector(inner), where=>where.OnBottom())
.Build();
var yaml = serializer.Serialize(data);
Console.WriteLine(yaml);
public class IgnoreTypeTypeInspector : TypeInspectorSkeleton
{
private readonly ITypeInspector innerTypeDescriptor;
public IgnoreTypeTypeInspector(ITypeInspector innerTypeDescriptor)
{
this.innerTypeDescriptor = innerTypeDescriptor ?? throw new ArgumentNullException(nameof(innerTypeDescriptor));
}
public override IEnumerable<IPropertyDescriptor> GetProperties(Type type, object? container)
{
var properties = innerTypeDescriptor.GetProperties(type, container)
.Where(p => p.Type != typeof(int));
return properties;
}
}
public class Receiver
{
public string ReceiverType = Guid.NewGuid().ToString();
public string ReceiverName = Guid.NewGuid().ToString();
public int IgnoreMyIntType = 0;
}
Results in
ReceiverType: 24329920-d193-4e5b-b849-1b033e46c3a6
ReceiverName: f9e33caa-86e3-4c12-8931-ec303a74b59f
Discussed in https://github.com/aaubry/YamlDotNet/discussions/861