Выход WCF JSON получает нежелательные котировки и обратные косые черты
Хорошо, поэтому я смущен тем, почему строка, которую я создаю, "волшебно" добавила в нее добавочные символы.
Прежде всего, я увидел обратные косые черты, появляющиеся в ближайшем окне:
"[{\"ID\":\"1\",\"F1\":\"lala\",\"F2\":\"hehe\"},{\"ID\":\"2\",\"F1\":\"abc\",\"F2\":\"def\"}]"
Но после прочтения в Google, что это только "визуальные" и фактически не существуют в самом значении переменной, я попробовал текст Visualizer:
[{"ID":"1","F1":"lala","F2":"hehe"},{"ID":"2","F1":"abc","F2":"def"}]
.. так хорошо, их там нет:)
Затем я перехожу к веб-сервису браузера Chrome:
{"JSONsampleResult":"[{\"ID\":\"1\",\"F1\":\"lala\",\"F2\":\"hehe\"},{\"ID\":\"2\",\"F1\":\"abc\",\"F2\":\"def\"}]"}
Таким образом, здесь не только обратная косая черта, но также добавлены кавычки вокруг квадратных скобок!?
Пожалуйста, пожалуйста, пожалуйста, может кто-нибудь объяснить, почему я не могу разобрать простую строку? Что добавляет все эти дополнения?
ServiceRestTable.svc(извлечение)
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace netshedWebService_2
{
public class ServiceRestTable : IServiceRestTable
{
private static long EpochTicks = new DateTime(1970, 1, 1).Ticks;
string ConString = ConfigurationManager.ConnectionStrings["netshedConnectionString"].ConnectionString;
SqlConnection con;
SqlCommand cmd;
SqlDataAdapter sda;
DataTable dt;
Sample emp = new Sample();
public String JSONsample(string p_str)
{
string myList;
using (con = new SqlConnection(ConString))
{
cmd = new SqlCommand("SELECT ID, F1, F2 FROM ADT.Test", con);
sda = new SqlDataAdapter(cmd);
dt = new DataTable("Paging");
sda.Fill(dt);
emp.SampleTable = dt;
myList = FromDataTable(emp.SampleTable);
return myList;
}
}
IServiceRestTable.cs
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace netshedWebService_2
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IRestServiceImpl" in both code and config file together.
[ServiceContract]
public interface IServiceRestTable
{
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "xml/{id}")]
Sample XMLsample(string id);
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "json/{id}")]
String JSONsample(string id);
}
[DataContract]
public class Sample
{
[DataMember]
public DataTable SampleTable
{
get;
set;
}
}
}
Web.config
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="netshedConnectionString" connectionString="xxxxx"/>
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<services>
<service name="netshedWebService_2.ServiceRestTable" behaviorConfiguration ="RestServiceBehaviour">
<endpoint address="" binding="webHttpBinding" contract="netshedWebService_2.IServiceRestTable" behaviorConfiguration="web">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="RestServiceBehaviour">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>