2013-02-25 2 views
3

C# 객체로 읽을 수있는 JSON 객체를 만들려고하는데 AJAX를 통해 전송하려고하면 400 개의 잘못된 요청 오류가 계속 발생합니다.C에서 역 직렬화 할 수있는 JSON 객체 만들기

$.ajax({ 
type: "POST", 
url: "LeagueService.svc/Fixtures", 
    data: JSON.stringify(fixture), 
    dataType: "json", 
    contentType: "application/json", 
    success: function (json, status, req) { 
     $successMessage = '<div class="hero-unit"><h2>Success</h2><p>The fixture has been added to the database.</p></div>'; 

     $('#dialog').html($successMessage).fadeOut(500, function (e) { 
      $(this).dialog("close"); 
     }); 

    }, 
    error: function (req, status, error) { 
     alert('Error: ' + req.responseText); 
    } 
}); 

을 그리고 내 고정물 객체가 다음과 같습니다 : 다음과 같이

내 자바 스크립트입니다

function Fixture() { } 

Fixture.prototype = 
{ 
    ID: "", 
    HomeTeam: "", 
    AwayTeam: "", 
    Date: "", 

    toJSON: function() { return { "fixture": {"ID" : this.ID, "HomeTeam" : this.HomeTeam, "AwayTeam" : this.AwayTeam, "Date" : this.Date} }; } 
}; 

이 방법은 내가 쓴 다른 기능에 절대적으로 좋은 일했다, 그래서 나는 확실하지 않다 무엇을 지금 잘못되고있다. 인터페이스 :

[OperationContract] 
[WebInvoke(Method = "POST", 
    BodyStyle = WebMessageBodyStyle.Wrapped, 
    RequestFormat = WebMessageFormat.Json, 
    ResponseFormat = WebMessageFormat.Json, 
    UriTemplate = "/Fixtures")] 
void AddFixture(Fixture fixture); 

및 방법 :

public void AddFixture(Fixture fixture) 
{ 
    using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.DBConnect)) 
    { 
     try 
     { 
      conn.Open(); 
      string query = "INSERT INTO tbFixtures (HomeTeam, AwayTeam, Date) VALUES(@HT, @AT, @Date);"; 
      using (SqlCommand cmd = new SqlCommand(query, conn)) 
      { 
       cmd.Parameters.AddWithValue("@HT", fixture.HomeTeam.ID); 
       cmd.Parameters.AddWithValue("@AT", fixture.AwayTeam.ID); 
       cmd.Parameters.AddWithValue("@Date", fixture.Date); 

       cmd.ExecuteNonQuery(); 
      } 
     } 
     catch (Exception) { } 
     finally 
     { 
      conn.Close(); 
     } 
    } 
} 

그리고 C#을 클래스 :

[DataContract(Name="Fixture", Namespace="")] 
public class Fixture 
{ 
    [DataMember(Name = "ID", Order = 1)] 
    public int ID { get; set; } 

    [DataMember(Name = "HomeTeam", Order = 2)] 
    public Team HomeTeam { get; set; } 

    [DataMember(Name = "AwayTeam", Order = 3)] 
    public Team AwayTeam { get; set; } 

    [DataMember(Name = "Date", Order = 4)] 
    public DateTime Date { get; set; } 
} 

[DataContract(Name = "Team", Namespace = "")] 
public class Team 
{ 
    [DataMember(Name = "ID", Order = 1)] 
    public int ID { get; set; } 

    [DataMember(Name = "Name", Order = 2)] 
    public string Name { get; set; } 

    [DataMember(Name = "Wins", Order = 3)] 
    public int Wins { get; set; } 

    [DataMember(Name = "Losses", Order = 4)] 
    public int Losses { get; set; } 

    [DataMember(Name = "Draws", Order = 5)] 
    public int Draws { get; set; } 

    [DataMember(Name = "GoalsConceded", Order = 6)] 
    public int GoalsConceded { get; set; } 

    [DataMember(Name = "GoalsScored", Order = 7)] 
    public int GoalsScored { get; set; } 

    [DataMember(Name = "Manager", Order = 8)] 
    public Manager Manager { get; set; } 
} 

[DataContract(Name = "Manager", Namespace = "")] 
public class Manager 
{ 
    [DataMember(Name = "ID", Order = 1)] 
    public int ID { get; set; } 
    [DataMember(Name = "Name", Order = 2)] 
    public string Name { get; set; } 
} 

은 관리자와 팀 클래스가

기록됩니다

내 C# 방법 및 인터페이스

JavaScript의 Fixture 클래스와 정확히 같은 방식으로.

개체가 올바른 JSON이라고 생각되는 것으로 serialize되지만 분명히 이러한 오류가 발생하는 경우 아닙니다. 사람이에 어떤 빛을 흘릴 수 있다면

{ "fixture": { 
    "ID":0, 
    "HomeTeam":{ 
     "ID":1, 
     "Name":"Rhondda St FC", 
     "Wins":21, 
     "Losses":2, 
     "Draws":4, 
     "GoalsConceded":20, 
     "GoalsScored":36, 
     "Manager": { 
      "ID":1, 
      "Name":"Ron Burgundy" 
     } 
    }, 
    "AwayTeam": { 
     "ID":2, 
     "Name":"Mt Pleasant United FC", 
     "Wins":18, 
     "Losses":5, 
     "Draws":3, 
     "GoalsConceded":22, 
     "GoalsScored":28, 
     "Manager": { 
      "ID":2, 
      "Name":"Brian Fantana" 
     } 
    }, 
    "Date":"02/19/2013 12:00pm" 
}} 

주시면 감사하겠습니다 다음과 같이 JSON 생산 이다. 감사!

편집 : (CSS를 제외) 전체 오류는 다음과 같습니다

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <title>Request Error</title> 
    </head> 
    <body> 
    <div id="content"> 
     <p class="heading1">Request Error</p> 
     <p xmlns="">The server encountered an error processing the request. Please see the <a rel="help-page" href="http://localhost:55310/LeagueService.svc/help">service help page</a> for constructing valid requests to the service.</p> 
    </div> 
    </body> 
</html> 
+0

전체 오류 메시지 란 무엇입니까? – jrummell

+0

끝에 오류 메시지를 추가했습니다. – jrdn

+0

서비스 메서드 디버깅을 시도 했습니까? – jrummell

답변

2

나는 그것이 당신의 날짜의 형식을 좋아하지 않기 때문에 그것이 생각 - 즉 '02/2천13분의 19 오후 12시을 '. C# Fixture Data Contract의 Date 유형을 문자열로 변경하거나 JS Fixture 프로토 타입의 toJSON 메서드를 편집하여 "2013-02-19Z"와 같은 형식으로 문자열을 반환하십시오.

+0

날짜를 변경하려고 시도했지만 작동하지 않았습니다. 궁극적으로 필자는 Fixture C# 클래스를 팀 오브젝트 대신 팀 ID를 보유하도록 변경했습니다. 현재 작동 중입니다. 실제로 내가하고 싶은 것은 아니지만 작동합니다. – jrdn