C# 使用Json获取自定义WCF对象

C# 使用Json获取自定义WCF对象,c#,jquery,.net,json,wcf,C#,Jquery,.net,Json,Wcf,[已解决] 我做了一个小测试项目来学习如何使用WCF对象和Json。如果您有任何关于这样做的好资源/教程,请让我知道 我试图通过它的id和一些jQuery脚本获取一个自定义对象User,这样做时,我的服务失败,没有消息。返回“已知”对象,如int或string可以正常工作,因此我认为我的web.config应该可以 iSeries设备 [ServiceContract] public interface IService { [OperationContract] [Web

[已解决]

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

我试图通过它的
id
和一些jQuery脚本获取一个自定义对象
User
,这样做时,我的服务失败,没有消息。返回“已知”对象,如
int
string
可以正常工作,因此我认为我的
web.config
应该可以

iSeries设备

[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>");
        }
    }
var类型;
var-Url;
var数据;
var内容类型;
var数据类型;
var过程数据;
$(文件)。准备好了吗(
函数(){
$(“#log”)。追加(“文档准备就绪”

”; GetUser(); } ); 函数GetUser(){ $(“#log”).append(称为GetUser

”; var userid=“1”; Type=“POST”; Url=”http://localhost:4270/Service.svc/GetUser"; 数据=“{”Id:“'+userid+“}”; ContentType=“application/json;charset=utf-8”; DataType=“json”; varProcessData=true; CallService(); } 函数CallService(){ $(“#log”).append(调用CallService

”; $.ajax({ 类型:类型, url:url, 数据:数据, contentType:contentType, 数据类型:数据类型, processdata:processdata, 成功:功能(msg){ 服务成功(msg); }, 错误:服务失败 }); } 函数ServiceSuccessed(结果){ $(“#log”)。追加(“servicesecessed

”; 如果(数据类型==“json”){ user=result.GetUserResult; $(“#结果”)。追加(“user=“+user+”

”); $(“#结果”).append(id=“+user.id+”

”); $(“#结果”).append(“name=“+user.name+”

”); } }
您是否尝试过更改post数据的大小写

因此:

Data = '{"Id": "' + userid + '"}';
应该是这样的:

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

不清楚吗?您可以递归调用GetUser,而无需任何停止条件<代码>返回GetUser(Convert.ToInt32(id))是。。校对后我马上就看到了。。我有另一个错误,将编辑我的问题。我注意到关于jQuery的另一个问题。您没有将ajax值传递给CallService,因此ajax调用无法工作。类型、URL、数据、CONTENTTYPE等都是该函数范围内未定义的变量。您需要从getUser()传递这些信息method@heymega这些被定义为全局变量。我将编辑我的帖子