【问题标题】:How to convert json properties that are formatted in dot notation to a c# class如何将以点表示法格式化的 json 属性转换为 c# 类
【发布时间】:2019-05-20 10:42:14
【问题描述】:

我正在使用HttpClient 从 api 检索数据。不幸的是,我无法控制属性名称,它们都是用点表示法编写的,例如

"staff":[{"responsible.user":"Y","staff.type":
    {"staff.type.mnemonic":"C","staff.type.name":"Consultant"}]

这个 json 回调中可能至少有 100 个左右的属性是这样的。 我需要返回一个删除点的 json 对象(即将 responsible.user 更改为 responsibleuser) 有没有办法映射一个 c# 类并返回我想要的格式?

我有一个使用 [DataContract] 属性和 [Datamember(Name=)] 字段映射值的 c# 类,但是当我查看返回的 json 时,它们的属性中仍然有点。

这就是我开始在我的控制器中使用的东西

 using(HttpClient c = new HttpClient())
        {
            c.DefaultRequestHeaders.Authorization =
               new System.Net.Http.Headers.AuthenticationHeaderValue(
                   "Bearer",
                   "Cazqmx-TTHOOfnJy92SRng=="
               );
            var link = string.Format(AmsApiGet, "6894998", "TYEE");
            var res = await c.GetStringAsync(link);
            TaskAPI task = new TaskAPI();

            task = JsonConvert.DeserializeObject<TaskAPI>(res);

            return Ok(task);

基本上,我只是想转换属性名称,以便我可以在前端 Angular 端使用打字稿模型

【问题讨论】:

    标签: c# asp.net angular asp.net-core-webapi


    【解决方案1】:

    您可以通过在将数据转换为 JSON 之前将数据转换为您自己的 POCO(Plain Ol' C# Object)来控制前端接收到的属性名称。

    TaskAPI task = new TaskAPI();
    
    List<myPOCO> list = new List<myPOCO>();
    
    foreach (var item in res)
      list.Add(new myPOCO(item)); //all your mapping is in the POCO Constructor
    
    task = JsonConvert.DeserializeObject(list); //or whatever syntax it would be
    

    【讨论】:

    • 谢谢,我要做类似的事情,我只是将我的 TaskApi 类的属性复制到一个新类中,删除该类中的数据协定,然后使用 automapper 返回 json回到我想要的样子
    猜你喜欢
    • 2013-09-15
    • 2019-08-02
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多