【问题标题】:Map text/plain multiline key=value http response to json and or c# object将文本/纯多行键 = 值 http 响应映射到 json 和/或 c# 对象
【发布时间】:2021-10-12 10:16:07
【问题描述】:

我正在使用第 3 方 api 并在正文中获得以下格式的纯文本响应:

item[0].Name = name  
item[0].Type = type  
item[1].Name etc...

有没有一种简单的方法可以将其映射到 c# 中的对象或 JSON?

我尝试操作字符串以将“\n”替换为“,”和“=”替换为“:”,并将其序列化为 JSON 对象,但没有得到任何结果。我还尝试以这种方式拆分字符串并从中创建对象,但我需要从这个 api 中访问很多端点,结果各不相同,这不是一个非常干净的解决方案。

编辑

以字符串形式读取响应内容后,响应的确切格式为 item[0].Name=name\r\nitem[0].Type=type\r\nitem[1].Name=name\r\nitem[1].Type=type

非常感谢任何帮助!

【问题讨论】:

  • 第三方 API 是否记录了他们的数据格式并提供了任何信息?第三方 API 是否可能允许您通过传递正确的标头来选择不同的返回格式?
  • 文档只是根据端点声明它可以作为多行纯文本或 JSON 对象返回,但我尝试传递接受应用程序/json 和内容类型应用程序/json,但它总是返回相同方式。
  • 您能否准确地发布正文中的纯文本是什么?你发布的内容在我看来不像纯文本。
  • 我在阅读回复后添加了一个编辑以显示确切的格式。感谢您的回答!

标签: c# json web httpclient


【解决方案1】:

试试这个,在 Visual Studio 中测试过

static void Main()
{

var t = @"item[0].Name = name0
item[0].Type = type0
item[1].Name = name1
item[1].Type = type1";

    var ta = t.Split("\r\n");

List<NameType>  list = new List<NameType>();
for (var i = 0; i < ta.Length; i += 2)
{
var itemNameArr = ta[i].Split("=");
var itemTypeArr = ta[i + 1].Split("=");

if( itemNameArr[0].Substring(0,itemNameArr[0].IndexOf(".")) 
      != itemTypeArr[0].Substring(0,itemNameArr[0].IndexOf("."))) return //error ; 
        
    var itemName = itemNameArr[1].Replace("\r", string.Empty).Replace("\n", string.Empty);
    var itemType= itemTypeArr[1].Replace("\r", string.Empty).Replace("\n", string.Empty); 
    list.Add(new NameType { Name = itemName, Type = itemType });
}
    var json = JsonSerializer.Serialize(list);
}

public class NameType
{
    public string Name { get; set; }
    public string Type { get; set; }
}

json

[
  {
    "Name": " name0",
    "Type": " type0"
  },
  {
    "Name": " name1",
    "Type": " type1"
  }
]

【讨论】:

  • 这与我尝试做的类似但更简洁,我现在正在考虑使用正则表达式来删除项目[0]。并使用 LINQ 填充对象。如果这不起作用,我会回到这个。
  • @McAuley 我相信您知道编译器将正则表达式转换为字符串操作,并将 Linq 转换为 foreach。我更喜欢控制一切,不要指望智能编译器。
猜你喜欢
  • 2020-08-08
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多