1

我正在编写一个返回对象 MyObject 的 WebApi。MyObject 类是在另一个 DLL 中定义的,我无法修改它的源代码。这个 MyObject 类没有放置 setter/getter,所以公共成员不是属性,它们只是字段。

所以在我的 WebApi 代码中,我想返回这个 Json MyObject,但我在 http 请求中得到的只是一个空的 {} json 数据,当我知道该对象确实包含数据时。唯一的区别是它没有发布 setter/getter,这就是它返回 {} 的原因。

我怎样才能将 MyObject 返回为 Json 和数据,而不必制作我自己的 MyOwnObject,其中所有确切的字段,但属性将它们设置为 get/set 属性?

例如,如果我使用

public class MyObject
{
    public string name;
}

即使 name 包含某些内容,此版本也会返回空 {} 数据,其中

public class MyObject
{
    public string name { get; set; }
}

将属性返回 Json 数据,但我无法修改 MyObject,因为它是从另一个我没有源的 DLL 编写的。

非常感谢。

4

2 回答 2

0

您可以使用Newtonsoft Json.Net(开源,MIT 许可证),它将公共属性序列化为字符串化 JSON 对象。您所要做的就是使用 JsonConvert.SerializeObject 静态方法。

但是,您必须对您的操作做一些额外的工作,因为您需要显式返回一个字符串化对象。

public HttpResponseMessage Get()
{
    // initialize your MyObject instance
    var cls = new MyObject
    {
        name = "AAAAA"
    };

    var stringified = JsonConvert.SerializeObject(cls);
    var response = Request.CreateResponse(HttpStatusCode.OK);

    // explicitly return a stringified JSON object
    response.Content = new StringContent(stringified, Encoding.UTF8, "application/json");
    return response;
}

有关此SO 问题的更多信息

于 2020-01-03T10:51:08.183 回答
0

不要直接通过您的 webapi 公开该外部对象。

  • 让您的所有模型更接近您的 API 代码,您可以在需要时进行更改。(在您的情况下,您需要在您的 api 项目中创建具有相同属性并获取和设置的新类)
  • 使用automapper将外部对象映射到您的 api 模型中(这将使您更容易)
于 2020-01-03T11:00:59.647 回答