非常简单的示例(我在单元测试中使用它):
private interface ISampleSubset
{
int id { get; }
}
private class Sample : ISampleSubset
{
public int id { get; set; }
public string name { get; set; }
}
这是一个围绕 NewtonSoft 的 JSON 序列化的小包装器:
public string Serialize<T>(T t)
{
using (var sw = new StringWriter())
{
using (var jw = new JsonTextWriter(sw))
{
var js = JsonSerializer.Create();
js.Serialize(jw, t);
jw.Flush();
}
return sw.GetStringBuilder().ToString();
}
}
现在我想序列化 ISampleSubset: 并像这样调用它:
ISampleSubSet t = new Sample()
{
id = 1,
name = "joe"
};
string json = Serialize(t);
我希望得到
{"id":1}
但相反我得到
{"id":1,"name":"joe"}
我猜 js.Serialize 正在使用反射来“查看”接口“外部”对象上的其他属性。如何将其限制为界面上的那些属性?