期待元素' root'来自命名空间' ..遇到'无'名称'',名称空间''

时间:2015-03-30 17:06:56

标签: c# json serialization deserialization datacontractjsonserializer

我一直在寻找过去4个小时的方法来解决这个问题,我还没有找到解决方案。

我正在使用.NET构建API,并希望解析从API调用发回的JSON信息。

我目前的做法如下:

private void PostNewPlayer(HttpContext context)
{
    // Create the serializer
    context.Request.InputStream.Position = 0;

    DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(ASPlayer));
    ASPlayer p = (ASPlayer)json.ReadObject(context.Request.InputStream);  <-- Exception here
    Int32 playerId = ASPlayerManager.InsertNewPlayer(p);
}

但我现在在指定的行上得到一个例外。我确保我的类实现了正确的序列化命名空间:

using System.Runtime.Serialization;
using System.IO;
using System.Runtime.Serialization.Json;

我尝试序列化的类已经相应地设置了DataContract和Member字段:

[DataContract]
public class ASPlayer
{
    [DataMember]
    private string _name;
    public string player_name 
    {
        get { return _name; }
        set { _name = value; }
    }

    [DataMember]
    private string _location;
    public string player_location
    {
       get { return _location; }
       set { _location = value; }
    }

    // Other vars
    ... 

    public ASPlayer(string name, string location)
    {
        _name = name;
        _location = location;
     }
}

但是,当我使用Postman等HTTP客户端发出请求时,我会收到问题标题中所述的错误

enter image description here

2 个答案:

答案 0 :(得分:2)

我认为你标记了错误的变量,这个:

[DataMember]
private string _name;
public string player_name 

应该是这样的:

private string _name;
[DataMember]
public string player_name 

答案 1 :(得分:-1)

答案是代表我的一个非常糟糕的错误,但是对于那些将来遇到这种情况的人,请确保通过Raw字段在Postman中发送您的JSON对象。在我的情况下,我只是做了:

{
  "player_name": "Test",
  "player_location": "EUW",
  "player_wins":10,
  "player_draws":10,
  "player_losses":15,
  "player_points":20
}

这解决了它