C# Json.Net反序列化复杂对象

C# Json.Net反序列化复杂对象,c#,.net,json,json.net,C#,.net,Json,Json.net,我对下一个类的JSON反序列化有疑问: public class Players:List<Player> { } public class Player { public Player() { PlayerTeam = new Team(); } public int PlayerId { get; set; } public Team PlayerTeam { get; set; } } public class T

我对下一个类的JSON反序列化有疑问:

public class Players:List<Player>
{
}

public class Player
{
    public Player()
    {
       PlayerTeam = new Team();
    } 

    public int PlayerId { get; set; }
    public Team PlayerTeam { get; set; } 
}

public class Team
{
    public int TeamId { get; set; }
    public string Name { get; set; }
}
公共职业玩家:列表
{
}
公开课选手
{
公共玩家()
{
PlayerTeam=新团队();
} 
public int PlayerId{get;set;}
公共团队玩家团队{get;set;}
}
公开课小组
{
public int TeamId{get;set;}
公共字符串名称{get;set;}
}
团队对象的结果始终为TeamId:0和Name:null。DataContractJsonSerializer在这个例子中工作很好,但是Json.Net没有。为什么?我需要在代码中更改什么,因为我必须在程序中使用Json.Net?

这很好:

 static void Main(string[] args)
        {
            Player player = new Player
            {
                PlayerTeam = new Team { Name ="ABC", TeamId= 20 }, PlayerId = 3
            };


            string json = JsonConvert.SerializeObject(player, Formatting.Indented);

            Console.WriteLine(json);

            Player player_Des = JsonConvert.DeserializeObject<Player>(json);

            Console.WriteLine(player_Des.PlayerTeam.Name);

            Console.ReadLine();
        }
希望这有助于做好这项工作:

 static void Main(string[] args)
        {
            Player player = new Player
            {
                PlayerTeam = new Team { Name ="ABC", TeamId= 20 }, PlayerId = 3
            };


            string json = JsonConvert.SerializeObject(player, Formatting.Indented);

            Console.WriteLine(json);

            Player player_Des = JsonConvert.DeserializeObject<Player>(json);

            Console.WriteLine(player_Des.PlayerTeam.Name);

            Console.ReadLine();
        }

希望它能帮上忙。还是不行。我无法重现这个问题

public class Players : List<Player>
{
}

public class Player
{
    public Player()
    {
        PlayerTeam = new Team();
    }

    public int PlayerId { get; set; }
    public Team PlayerTeam { get; set; }
}

public class Team
{
    public int TeamId { get; set; }
    public string Name { get; set; }
}
公共职业玩家:列表
{
}
公开课选手
{
公共玩家()
{
PlayerTeam=新团队();
}
public int PlayerId{get;set;}
公共团队玩家团队{get;set;}
}
公开课小组
{
public int TeamId{get;set;}
公共字符串名称{get;set;}
}

var json=“[{\'PlayerId\':3,\'PlayerTeam\':{\'TeamId\':20,\'Name\':\'ABC\'},{\'PlayerId\':4,\'PlayerTeam\':{\'TeamId\':21,\'Name\':\'ABCD\}];
var players=JsonConvert.DeserializeObject(json);
foreach(玩家中的var玩家)
{
WriteLine($“{player.PlayerId},{player.PlayerTeam.TeamId}-{player.PlayerTeam.Name}”);
}
印刷品:

3,20-ABC

4,21-ABCD


也许您使用了一些旧版本的Newtonsoft.Json?仍然没有。我无法重现这个问题

public class Players : List<Player>
{
}

public class Player
{
    public Player()
    {
        PlayerTeam = new Team();
    }

    public int PlayerId { get; set; }
    public Team PlayerTeam { get; set; }
}

public class Team
{
    public int TeamId { get; set; }
    public string Name { get; set; }
}
公共职业玩家:列表
{
}
公开课选手
{
公共玩家()
{
PlayerTeam=新团队();
}
public int PlayerId{get;set;}
公共团队玩家团队{get;set;}
}
公开课小组
{
public int TeamId{get;set;}
公共字符串名称{get;set;}
}

var json=“[{\'PlayerId\':3,\'PlayerTeam\':{\'TeamId\':20,\'Name\':\'ABC\'},{\'PlayerId\':4,\'PlayerTeam\':{\'TeamId\':21,\'Name\':\'ABCD\}];
var players=JsonConvert.DeserializeObject(json);
foreach(玩家中的var玩家)
{
WriteLine($“{player.PlayerId},{player.PlayerTeam.TeamId}-{player.PlayerTeam.Name}”);
}
印刷品:

3,20-ABC

4,21-ABCD


也许您使用了一些旧版本的Newtonsoft.Json?

您的示例Json是什么?{“PlayerId”:3,“PlayerTeam”:{“TeamId”:20,“Name”:“ABC”}我无法重现您的问题
var Json=“{\“PlayerId\”:3,“PlayerTeam\”:{“TeamId\”:20,“Name\:“ABC\”}”;var obj=JsonConvert.DeserializeObject(json);WriteLine($“{obj.PlayerId},{obj.PlayerTeam.TeamId}-{obj.PlayerTeam.Name}”)请提供。请尝试下一步:
var json=“[{\'PlayerId\':3,\'PlayerTeam\':{\'TeamId\':20,\'Name\':\'ABC\'},{\'PlayerId\':4,\'PlayerTeam\':{\'TeamId\':21,\'Name\':'ABCD\'}];var obj=JsonConvert.DeserializeObject(json);Console.WriteLine($“{obj[0].PlayerId},{obj[0].PlayerTeam.TeamId}-{obj[0].PlayerTeam.Name}”)对我来说。你的json示例是什么?{“PlayerId”:3,“PlayerTeam”:{“TeamId”:20,“Name”:“ABC”}我无法重现你的问题
var json=“{\“PlayerId\”:3,“PlayerTeam\:{“TeamId\”:20,“Name\”:“ABC\”}”;var obj=JsonConvert.DeserializeObject(json);WriteLine($“{obj.PlayerId},{obj.PlayerTeam.TeamId}-{obj.PlayerTeam.Name}”)请提供。请尝试下一步:
var json=“[{\'PlayerId\':3,\'PlayerTeam\':{\'TeamId\':20,\'Name\':\'ABC\'},{\'PlayerId\':4,\'PlayerTeam\':{\'TeamId\':21,\'Name\':'ABCD\'}];var obj=JsonConvert.DeserializeObject(json);Console.WriteLine($“{obj[0].PlayerId},{obj[0].PlayerTeam.TeamId}-{obj[0].PlayerTeam.Name}”)给我。谢谢。对这个例子是可行的,但在我的程序中,类有其他结构,这是不可行的。在我的程序中,我有这样一个结构:public Players:List{}public class Player{public Player(){PlayerTeam=new Team();}public int PlayerId{get;set;}public Team PlayerTeam{get;set;}公共类团队{public int TeamId{get;set;}公共字符串名称{get;set;}}让我看看我不能。请尝试以下代码:
var json=“[{\'PlayerId\':3,\'PlayerTeam\':{\'TeamId\':20,\'Name\':\'ABC\'},{\'PlayerId\':4,\'PlayerTeam\':{\'TeamId\':21,\'Name\':\'ABCD\'}];var obj=JsonConvert.DeserializeObject(json);Console.WriteLine($“{obj[0].PlayerId},{obj[0].PlayerTeam.TeamId}-{obj[0].PlayerTeam.Name}”)对我来说很好,我编辑了你的问题。我只是没有使用Console.WriteLine($“{obj[0].PlayerId},{obj[0].PlayerTeam.TeamId}-{obj[0].PlayerTeam.Name}”);相反,我使用了:Console.WriteLine(obj[1].PlayerId);Console.WriteLine(obj[1].PlayerTeam.TeamId);Console.WriteLine(obj[1].PlayerTeam.Name);非常感谢。对这个例子是可行的,但在我的程序中,类有其他结构,这是不可行的。在我的程序中,我有这样一个结构:public Players:List{}public class Player{public Player(){PlayerTeam=new Team();}public int PlayerId{get;set;}public Team PlayerTeam{get;set;}公共类团队{public int TeamId{get;set;}公共字符串名称{get;set;}}让我看看我不能。请尝试以下代码:
var json=“[{\'PlayerId\':3,\'PlayerTeam\':{\'TeamId\':20,\'Name\':\'ABC\'},{\'PlayerId\':4,\'PlayerTeam\':{\'TeamId\':21,\'Name\':\'ABCD\'}];var obj=JsonConvert.DeserializeObject(json);Console.WriteLine($“{obj[0].PlayerId},{obj[0].PlayerTeam.TeamId}-{obj[0].PlayerTeam.Name}”)它工作吗