【问题标题】:Return XML Data From Asp.Net API从 Asp.Net API 返回 XML 数据
【发布时间】:2018-11-29 15:59:22
【问题描述】:

我有一个使用从我的服务器返回的 xml 数据的 asp.net API。这是返回数据的格式(我在地址栏中输入 localhost.... 时得到的格式)

ID = 3, fname = a, lname = a, phone = 123, company = abcID = 4, fname = a, lname = b, phone = c, company = dID = 5, fname = aa, lname = bb, phone = cc, company = ddID = 6, fname = Frame, lname = Blame, phone = 5555555555, company = Company

当我尝试使用我的 C# 从 API 返回数据时,我收到此错误

将值“ID = 3, fname = a, lname = a, phone = 123, company = abc”转换为类型“TestData”时出错

这是我用来尝试检索数据的方法。我必须做什么才能准确返回数据?

        public List<TestData> GetGridInfo()
    {
        string URI = "http://localhost/api/getinfo";

        using (var webClient = new System.Net.WebClient())
        {
            var json = webClient.DownloadString(URI);

            var message = JsonConvert.DeserializeObject<List<TestData>>(json);

            return message;
        }
    }

这是 API 语法 ->

        public IEnumerable<string> Get()
    {
        List<string> result = new List<string>();
        using (XamarinEntities entities = new XamarinEntities())
        {
            result = entities.appinfoes.AsEnumerable().Where(x => x.approveduser == null || x.approveduser=="No").Select(y =>  "ID = "+y.ID+", fname = "+ y.fname+", lname = "+ y.lname+", phone = "+ y.phone+", company = "+ y.company).ToList();
        }
        return result;
    }

编辑 -> 上面的语法是它在我的本地机器上的样子,如果我使用服务器访问本地主机,这是我得到的格式,对我来说看起来像 XML...

<?xml version="1.0" encoding="ISO-8859-1"?>
<ArrayOfstring     xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays"     xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<string>ID = 3, fname = a, lname = a, phone = 123, company = abc</string>
<string>ID = 4, fname = a, lname = b, phone = c, company = d</string>
<string>ID = 5, fname = aa, lname = bb, phone = cc, company = dd</string>
</ArrayOfstring>

【问题讨论】:

  • 您分享的数据不是 JSON 数据。如果你有API的代码,是否需要在这里分享一下。
  • 您的标题显示“从 Asp.Net API 返回 XML 数据”,您尝试在客户端将其解析为 Json API 的结果既不是 XML 也不是 JSON。我认为您需要在尝试使用它们之前阅读这些元语言。
  • @ChetanRanpariya - 我发布了用于在 API 中返回数据的 API 方法
  • 您正在返回一个字符串集合。那不是 JSON。您需要将其转换为适当的类对象,然后在从 API 返回之前将其序列化为 JSON。那时您可以将 API 响应反序列化到客户端的某个类。

标签: c# asp.net api


【解决方案1】:

您没有返回 JSON。您正在返回一个不是 JSON 的字符串数组

你应该这样做

public string Get()
{
    List<string> result = new List<string>();
    using (XamarinEntities entities = new XamarinEntities())
    {
        result = entities.appinfoes.AsEnumerable().Where(x => x.approveduser == null || x.approveduser=="No").Select(y =>  "ID = "+y.ID+", fname = "+ y.fname+", lname = "+ y.lname+", phone = "+ y.phone+", company = "+ y.company).ToList();
    }
    return JsonConvert.SerializeObject(result);
}

以上代码将返回 JSON 而不是字符串数组

更改您的代码以接收列表

例如

public List<string> GetGridInfo()
{
    string URI = "http://localhost/api/getinfo";

    using (var webClient = new System.Net.WebClient())
    {
        var json = webClient.DownloadString(URI);

        var message = JsonConvert.DeserializeObject<List<string>>(json);

        return message;
    }
}

一条建议使用HttpClient而不是WebClient

【讨论】:

  • 这给了我无法将类型“字符串”隐式转换为“Generic.IEnumerabl”的编译错误
  • 查看更新的答案,您必须更改返回类型
  • 使用上述方法 - 当我尝试使用 GetGridInfo() 方法检索数据时,我得到一个 Newtonsoft.Json.JsonSerializiationException
  • 如果有用的话,也请给答案投票。
猜你喜欢
  • 2013-06-23
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 2015-11-09
  • 2015-08-17
相关资源
最近更新 更多