【问题标题】:how to display a string from a rest webservice in windows forms?如何在 Windows 窗体中显示来自 REST Web 服务的字符串?
【发布时间】:2012-04-24 12:03:44
【问题描述】:

如何在 windows 窗体中显示来自 REST Web 服务的字符串,我的 xml 如下所示:

<string>whatever</string>

如何在 win 表单的文本框中显示它?

如果我尝试

        string uri = string.Format("etc/{0}/{1} Sad.Text, Happy.Text");
        XDocument xDoc = XDocument.Load(uri);
        string mystring = xDoc.Element("String").Value;
        textBox1.Text = mystring;

你得到一个对象引用错误?

【问题讨论】:

标签: c# string wcf web-services rest


【解决方案1】:

XML 元素区分大小写。试试吧,

string mystring = xDoc.Element("string").Value;

解决问题的更好方法是不使用 XML 返回简单字符串。媒体类型text/plain 就是为此而设计的。如果您使用的是Microsoft's ASP.NET Web API,请返回

return new HttpResponseMessage() { 
            Content = new StringContent("etc/{0}/{1} Sad.Text, Happy.Text")
           };

在客户端(使用这个http://nuget.org/Packages/system.net.http)做,

var httpClient = new HttpClient();
textBox1.Text = httpClient.GetAsync(uri).Result.Content.ReadAsString();

【讨论】:

  • 说真的哈哈微软需要修复该死的区分大小写的东西!
  • @KirstyWhite 你将不得不抱怨比微软更高的食物链。 XML 规范将元素和属性名称定义为区分大小写。
  • @KirstyWhite 谁说它坏了?
【解决方案2】:

我会使用 XmlSerializer 从 Web 服务返回的 XML 中获取信息。我假设您的 XML 只是一个字符串。您可以为您的简单示例执行类似的操作,但这也适用于 REST Web 服务返回的更复杂的对象。

 XmlSerializer xs = new XmlSerializer ( typeof ( string ) );
 MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(restResult));
 XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
 string textBoxVal = xs.Deserialize(memoryStream);

【讨论】:

  • 仅仅为了得到一串文字,似乎真的很沉重?
  • 那么也许你只需要stream .ReadToEnd() 然后忽略标签:)
  • 我提出的解决方案对于任何返回的 xml 都是通用的。如果您不想使用 XmlSerializer 并且始终只返回该字符串,则可以使用 Substring 将其从字符串中拉出,因为您知道标签在字符串开头和结尾的长度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-24
  • 2012-12-27
  • 1970-01-01
  • 2015-10-10
  • 1970-01-01
相关资源
最近更新 更多