如何限制 T 支持 DataContractJsonSerializer,而不是到处实现 ISerializable?
我正在研究 此 扩展方法,并尝试约束 T 以便该方法不适用于每个对象...仅适用于 DataContractJsonSerializer 可以很好地使用的对象
public static string ToJSONString(this object obj)
{
using (var stream = new MemoryStream())
{
var ser = new DataContractJsonSerializer(obj.GetType());
ser.WriteObject(stream, obj);
return Encoding.UTF8.GetString(stream.ToArray());
}
}
I'm working on this extension method and am trying to constrain T so that the method doesn't apply to EVERY object... just the ones that the DataContractJsonSerializer works well with
public static string ToJSONString(this object obj)
{
using (var stream = new MemoryStream())
{
var ser = new DataContractJsonSerializer(obj.GetType());
ser.WriteObject(stream, obj);
return Encoding.UTF8.GetString(stream.ToArray());
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
泛型内部可用的选项......有限。一种解决方法是使用反射(通常在泛型类型的静态构造函数中)来检查反射,但老实说,这可能有点过头了。您是否可以添加
where T : class, new()
这可能会在很大程度上将其限制为“实体”/DTO 类型。The options available inside generics are... Limited. One workaround is to use reflection (typically in a static ctor on a generic type) to check with reflection, but tbh this may be overkill. Could you perhaps add
where T : class, new()
which may go a long way to limit it to "entity"/DTO types.