using System.Xml.Serialization;
public interface ISlicable<T>
public abstract T SliceFrom(T b);
public record B : ISlicable<B>
public B SliceFrom(B b) => new B(b);
public string BaseProperty
public string SomeProperty
public class Serializer<T> where T: ISlicable<T>
XmlSerializer ser = new XmlSerializer(typeof(B));
public void Serialize(TextWriter w, T obj) => ser.Serialize(w, obj.SliceFrom(obj));
public static class Program
var c = new C{BaseProperty = "Base", SomeProperty = "Some"};
var serializer = new Serializer<B>();
TextWriter w = new StringWriter();
serializer.Serialize(w, c);
Console.WriteLine(w.ToString());