【问题标题】:Creating correct object structure for incoming json为传入的 json 创建正确的对象结构
【发布时间】:2025-12-09 03:55:01
【问题描述】:

我有以下脚本

<script>
    $(window).load(function () {
        var model = [
            {
                "reservation":
                {
                    "ticketId": "782274b8-10d9-444c-8f05-3117853e3ee0",
                    "clubId": 70656,
                    "courtNumber": 1,
                    "crud_name": "add",
                    "reservationtype_name": "toernooi",
                    "players" : 
                        [
                            {
                                "player" : { "id": "18674992", "name": "Jan Jansen"}
                            },
                            {
                                "player": { "id": "19543840", "name": "Klaas Klaassen" }
                            }
                        ]
                }
            }, 
            {
                "reservation":
                {
                    "ticketId": "782274b8-10d9-444c-8f05-3117853e3ee0",
                    "clubId": 70656,
                    "courtNumber": 1,
                    "crud_name": "update",
                    "reservationtype_name": "toernooi",
                    "players":
                        [
                            {
                                "player": { "id": "18674992", "name": "Jan Jansen" }
                            },
                            {
                                "player": { "id": "19543840", "name": "Klaas Klaassen" }
                            }
                        ]
                }
            }
        ];
        alert(JSON.stringify(model));
        $.ajax({
            type: "POST",
            data: JSON.stringify(model),
            url: "http://localhost:59854/api/incomingapi",
            contentType: "application/json",
            dataType: 'json',
            success: function (result) { },
            error: function (errResult) { }
        });
    });
</script>

我有这些课程

namespace MySQLTestApp.Models
{
    public class player
    {
        public string id { get; set; }
        public string name { get; set; }
    }

    public class ReservationModelForJson
    {
        public string ticketId { get; set; }
        public int clubId { get; set; }
        public int courtNumber { get; set; }
        public string crud_name { get; set; }
        public string reservationtype_name { get; set; }
        public IEnumerable<player> players { get; set; }
    }

    public class JsonBinder
    {
        public ReservationModelForJson reservation { get; set; }
    }
}

这是我的控制器

public string Post(IEnumerable<JsonBinder> reservations)
{
    int clubId = reservations.First().reservation.clubId;//is 70656
    int courtNumber = reservations.First().reservation.courtNumber;//is 1
    string playerId = reservations.First().reservation.players.First().id;//is null, should be 18674992
    return "tnkx!";
}

reservation 中的“复杂”players 属性不会被填充。所有简单的值都可以!正如您在上面看到的,clubIdcourtNumber 具有值。

我无法更改 Json 的格式。我必须创建一个正确的类结构。并使用它来解析值...

有人知道要创建的正确类结构吗?我无法修复它...

【问题讨论】:

  • 提示:为什么不使用 Json.net 让您的生活更轻松?

标签: c# json ajax asp.net-web-api2 asp.net-mvc-5.2


【解决方案1】:

您可以使用json2csharp.com 从 JSON 生成类。

你应该有:

public class Player2
{
    public string id { get; set; }
    public string name { get; set; }
}

public class Player
{
    public Player2 player { get; set; }
}

public class Reservation
{
    public string ticketId { get; set; }
    public int clubId { get; set; }
    public int courtNumber { get; set; }
    public string crud_name { get; set; }
    public string reservationtype_name { get; set; }
    public List<Player> players { get; set; }
}

public class RootObject
{
    public Reservation reservation { get; set; }
}

【讨论】:

    【解决方案2】:

    根据您的模型,您应该有某种 PlayerWrapper:

    public class playerWrapper
    {
        public player player{ get; set; }
    }
    
    public class player
    {
        public string id { get; set; }
        public string name { get; set; }
    }
    
    public class ReservationModelForJson
    {
        ...
        public IEnumerable<playerWrapper> players { get; set; }
    }
    
    public class JsonBinder
    {
        public ReservationModelForJson reservation { get; set; }
    }
    

    【讨论】:

    • 我接受了 BWA 对他提供的有用链接的回答原因。这个答案也有效!