【问题标题】:Send a String as JSON object from web api to the client将字符串作为 JSON 对象从 Web api 发送到客户端
【发布时间】:2022-01-26 16:59:23
【问题描述】:

在 C# 中的 .Net Core (EF) WebApi 中,我有一个对象 Property,其中包含一个(字符串)属性 Settings

var p = new Property(){ Settings = "{decimals: 2, color: 'red'}" }

如您所见,字符串不是严格的JSON格式,所以在客户端解析需要额外的精力,我想花在服务器端。

我应该如何配置 EF 返回给我的属性不是字符串,而是 json 对象,因此,对于上面的示例,该对象将是这样的:

{ 
  settings: {
    decimals: 2, 
    color: 'red'
  } 
}

而不是

{ 
  settings: "{decimals: 2, color: 'red' }"
}

其实我得到的……

【问题讨论】:

  • 在我看来,这里的任务确实与 Angular、EF 或 WebAPI 无关——这是一个“如何解析不是 JSON 的字符串”的问题。是这样吗? (如果是这样,我建议您更加关注您的问题,并展示您已经尝试过的内容。)
  • @JonSkeet,是一个在哪里解析它的问题,在什么时候,在服务器端,应该对属性“设置”进行注释,或者以另一种方式告诉服务器将字符串作为对象发送
  • @JonSkeet 我同意不是关于角度的问题,我删除了标签,这是关于 EF 的问题。
  • 实体框架到底如何?数据是数据库中的字符串,是吗?我希望相同的解决方案应用 however 您收到该字符串 - 无论它来自数据库、文件还是其他任何内容。我不希望实体框架开始为您解析 not-quite-json。这确实是 IMO 的一个应用问题。
  • @JonSkeet 大概是要在服务器端写一个 StringToJsonConverter 和 EF 配置一起使用

标签: c# json entity-framework asp.net-core-webapi


【解决方案1】:

尝试将键也放在引号中:

var p = new Property(){ Settings = "{'decimals': 2, 'color': 'red'}" }

或者尝试将字符串解析为 json 对象。

【讨论】:

  • 我想把字符串保持原样,不修改,在服务器端解析,不知道什么时候做
【解决方案2】:

我会使用 JObject 类从中创建一个 JSON 对象。请查看here 了解有关该课程的更多详细信息。

【讨论】:

【解决方案3】:

你可以试试这样的:

[HttpGet]
public IActionResult YourApiEndpoint()
{
    var p = new Property() { Settings = "{decimals: 2, color: 'red'}" };
    var settings = JsonConvert.DeserializeObject<Settings>(p.Settings);
    return Ok(new
    {
        Settings = settings
    });
}

public class Settings
{
    public int Decimals { get; set; }
    public string Color { get; set; }
}

如果您想使用内置序列化程序,请使用 JsonSerializer.Deserialize&lt;&gt; 而不是 JsonConvert

【讨论】:

    猜你喜欢
    • 2015-04-06
    • 2013-11-16
    • 1970-01-01
    • 2016-11-21
    • 2015-10-27
    • 1970-01-01
    • 2012-12-01
    • 2018-01-09
    • 1970-01-01
    相关资源
    最近更新 更多