【问题标题】:Get custom WCF object with Json使用 Json 获取自定义 WCF 对象
【发布时间】:2013-12-16 16:45:54
【问题描述】:

[已解决]

我做了一个小测试项目来学习如何使用 WCF 对象和 Json。如果您有任何好的资源/教程,请告诉我。

我正在尝试使用一些 jQuery 脚本通过 id 获取自定义对象 User,这样做时我的服务失败且没有消息。返回像intstring 这样的“已知”对象可以正常工作,所以我认为我的web.config 应该没问题

IService

[ServiceContract]
public interface IService
{   
    [OperationContract]
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
    User GetUser(int id);       
}

[DataContract]
public class User
{
    [DataMember]
    public int id { get; set; }
    [DataMember]
    public string name { get; set; }
}

Service.svc.cs

[AspNetCompatibilityRequirements(RequirementsMode
= AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService
{  
    public User GetUser(int id)
    {
        return new User() { id=1, name="foo" };
    }
}

Json

var Type;
var Url;
var Data;
var ContentType;
var DataType;
var ProcessData;    

$(document).ready(
        function() {
            $("#log").append("<p>Document ready</p>");
            GetUser();
        }
    );  

function GetUser() {
        $("#log").append("<p>Called GetUser</p>");
        var userid = "1";
        Type = "POST";
        Url = "http://localhost:4270/Service.svc/GetUser";
        Data = '{"Id": "' + userid + '"}';
        ContentType = "application/json; charset=utf-8";
        DataType = "json"; 
        varProcessData = true; 
        CallService();
    }

function CallService() {
        $("#log").append("<p>Called CallService</p>");
        $.ajax({
            type: Type,
            url: Url,
            data: Data,
            contentType: ContentType,
            dataType: DataType,
            processdata: ProcessData,
            success: function(msg) {
                ServiceSucceeded(msg);
            },
            error: ServiceFailed
        });
    }

function ServiceSucceeded(result) {
        $("#log").append("<p>ServiceSucceeded</p>");
        if (DataType == "json") {
            user = result.GetUserResult;
            $("#result").append("<p> user = " +user+ "</p>");
            $("#result").append("<p> id = " +user.id+ "</p>");
            $("#result").append("<p> name = " +user.name+ "</p>");
        }
    }

【问题讨论】:

  • 不是很清楚吗?您递归调用 GetUser 而没有任何停止条件。 return GetUser(Convert.ToInt32(id));
  • 是的.. 校对后我立即看到了.. 我有另一个错误,将编辑我的问题。
  • 我注意到关于您的 jQuery 的另一个问题。您没有将 ajax 值传递给 CallService,因此您的 ajax 调用将不起作用。 TYPE、URL、DATA、CONTENTTYPE 等都是该函数范围内的未定义变量。你需要从你的 getUser() 方法中传递这些
  • @heymega 这些被定义为全局变量。我将编辑我的帖子

标签: c# jquery .net json wcf


【解决方案1】:

您是否尝试过更改帖子数据的大小写?

所以这个:

Data = '{"Id": "' + userid + '"}';

应该是这样的:

Data = '{"id": "' + userid + '"}';

【讨论】:

    猜你喜欢
    • 2011-09-28
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多