发出 JSON 的 WCF Web 服务(Noob 建议)
Posted
技术标签:
【中文标题】发出 JSON 的 WCF Web 服务(Noob 建议)【英文标题】:WCF Web Service that emits JSON (Noob advice) 【发布时间】:2011-12-12 12:55:32 【问题描述】:我非常了解 C#、XAML、Visual Studio 等领域,我需要一些帮助来了解如何创建一个简单的发出 JSON 的 WCF Web 应用程序,我还想知道如何测试该应用程序的输出也是如此。
我一直在四处寻找并关注了几个不同的blogs,但到目前为止都没有运气。我在这里找到了另一个post,但我的尝试再次失败了哈哈
我想我现在已经到了让自己完全困惑的地步,因为我看了太多不同的例子,需要这个伟大网站的帮助:)
我会尽力为您提供尽可能多的代码,希望我已经完成了一些可以获救的事情!
非常感谢您的帮助!!
Person.cs
namespace TestService
[DataContract]
public class Person
[DataMember]
public string FirstName get; set;
[DataMember]
public string LastName get; set;
[DataMember]
public int Age get; set;
public Person(string firstName, string lastName, int age)
this.FirstName = firstName;
this.LastName = lastName;
this.Age = age;
MyTestService.svc.cs
namespace TestService
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class TestService
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
public string GetResults()
List<Person> results = new List<Person>();
results.Add(new Person("Peyton", "Manning", 35));
results.Add(new Person("Drew", "Brees", 31));
results.Add(new Person("Tony", "Romo", 29));
// Serialize the results as JSON
DataContractJsonSerializer serializer = new DataContractJsonSerializer(results.GetType());
MemoryStream memoryStream = new MemoryStream();
serializer.WriteObject(memoryStream, results);
// Return the results serialized as JSON
string json = Encoding.Default.GetString(memoryStream.ToArray());
return json;
MyTestService.svc
<%@ ServiceHost Language="C#"
Service="TestService.MyTestService"
Factory="System.ServiceModel.Activation.ServiceHostFactory" %>
web.config
<configuration>
<connectionStrings>
<add name="ApplicationServices"
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;
AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" timeout="2880" />
</authentication>
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
applicationName="/" />
</providers>
</membership>
<profile>
<providers>
<clear/>
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
</providers>
</profile>
<roleManager enabled="false">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
</configuration>
【问题讨论】:
【参考方案1】:您不需要序列化您希望返回的对象,.NET 将在幕后为您处理这一切。
像这样修改GetResults
方法:
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
public List<Person> GetResults()
List<Person> results = new List<Person>();
results.Add(new Person("Peyton", "Manning", 35));
results.Add(new Person("Drew", "Brees", 31));
results.Add(new Person("Tony", "Romo", 29));
return results;
希望这会有所帮助。
【讨论】:
真的,这样我就可以摆脱后续了?? // 将结果序列化为 JSON DataContractJsonSerializer serializer = new DataContractJsonSerializer(results.GetType()); MemoryStream memoryStream = new MemoryStream(); serializer.WriteObject(memoryStream, results); // 返回序列化为 JSON 字符串的结果 json = Encoding.Default.GetString(memoryStream.ToArray());返回 json; 我已经进行了修改,非常感谢您的建议。你知道我如何测试这个应用程序的输出吗?对不起,如果这是一个愚蠢的问题 如果您只需要看到它返回 JSON,您可以使用浏览器调用它:http://path/TestService.svc/GetResults
当前,当我运行我的应用程序时,我收到此错误 Microsoft JScript runtime error: 'JSON' is undefined :oS
啊,我想那是因为我从 VS 运行它,我尝试了 localhost/TestService.svc/GetResults,但页面只是空白。谢谢以上是关于发出 JSON 的 WCF Web 服务(Noob 建议)的主要内容,如果未能解决你的问题,请参考以下文章
移动应用程序和 Web 服务数据传输(WCF 和 JSON)