如何限制 T 支持 DataContractJsonSerializer,而不是到处实现 ISerializable?

发布于 2024-10-13 03:33:31 字数 538 浏览 4 评论 0原文

我正在研究 扩展方法,并尝试约束 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓝咒 2024-10-20 03:33:31

泛型内部可用的选项......有限。一种解决方法是使用反射(通常在泛型类型的静态构造函数中)来检查反射,但老实说,这可能有点过头了。您是否可以添加 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文