WebService返却テキストJSONデータフォーマット

39195 ワード

WebServiceが返すフォーマットはすべてxmlです
Markup
<string xmlns="">Hello Worldstring>

前段js処理時にxmlを解析する必要がある
JavaScript
$.parseXML(xmlstr).find("string").text();

処理に苦労し互換性の問題もある
サイトはjson形式に戻りました
Markup
<string xmlns="http://tempuri.org/">{"Name":"  ","Age":18}string>

xmlがjson文字列を変換する前に処理する必要があります
WebServiceをJSONデータフォーマットに直接戻す方法1:
C#
    [WebMethod]

    public void HelloWorld()

    { 

        string str= "Hello World"; 

        Context.Response.Write(str);

        Context.Response.End();

    }

文字列フォーマットを直接得ることができる欠点は、すべての方法でContextを書く必要があることです.Response.WriteとContext.Response.End
WebServiceをJSONデータフォーマットに直接戻す方法2:
Web.configで増加
C#
    <modules>

      <add name="AsmxRequestModule" type="AsmxRequestModule"/>

    </modules>

IISクラシックモードはhttpModules
appcodeにクラスファイルを追加
C#
public class AsmxRequestModule : IHttpModule

{

    public void Init(HttpApplication context)

    {

        context.BeginRequest += new EventHandler(Application_BeginRequest);

    }

    public void Dispose()

    {

    }

    public void Application_BeginRequest(object sender, EventArgs e)

    {

        HttpApplication application = sender as HttpApplication;

        string extension = Path.GetExtension(application.Request.Path);

        if (application.Request.Path.IndexOf("/WebService.asmx/") > -1)

        {

            application.Response.Filter = new CatchTextStream(application.Response.Filter);

        }

    }

}

C# public class CatchTextStream : Stream { #region /// /// /// private Stream output; #endregion #region /// /// /// /// /// /// /// public CatchTextStream(Stream s) { output = s; } #endregion #region public override bool CanRead { get { return output.CanRead; } } public override bool CanSeek { get { return output.CanSeek; } } public override bool CanWrite { get { return output.CanWrite; } } public override void Flush() { output.Flush(); } public override long Length { get { return output.Length; } } public override long Position { get { return output.Position; } set { output.Position = value; } } public override int Read(byte[] buffer, int offset, int count) { return output.Read(buffer, offset, count); } public override long Seek(long offset, SeekOrigin origin) { return output.Seek(offset, origin); } public override void SetLength(long value) { output.SetLength(value); } public override void Write(byte[] buffer, int offset, int count) { if (HttpContext.Current != null) { HttpContext context = HttpContext.Current; Encoding encoding = context.Response.ContentEncoding; string responseInfo = encoding.GetString(buffer, offset, count); responseInfo = responseInfo.Replace("\r
"
, ""); responseInfo = responseInfo.Substring(0, responseInfo.Length - 9); buffer = encoding.GetBytes(responseInfo); output.Write(buffer, 0, buffer.Length); } } #endregion }

そしてフロントで び すと、xmlを たないテキストデータを すことができ、webservice び し でNewtonsoftを することができます.Json.JsonConvertがJSON に されて りました.
:http://www.qyuit.com/post/65.html