C#使用Newtonsoft.Json将JSON字符串反序列化为对象

时间:2017-08-14 20:19:26

标签: c# json serialization json.net

我正在尝试使用Newtonsoft.json将json字符串转换为对象,但是我在进行以下转换时遇到了一些问题。我想知道是否有人可以解释这一点。谢谢。

AddFaceResponse ir = JsonConvert.DeserializeObject<AddFaceResponse>(responseContentStr);

这是json字符串responseContentStr

[{
    "faceId": "1fe48282-a3b0-47d1-8fa8-67c4fac3d984",
    "faceRectangle": {
        "top": 80,
        "left": 50,
        "width": 147,
        "height": 147
    }
}]

这是我的模型对象。

public class AddFaceResponse
    {
        public class Face
        {
            public class FaceRectangle
            {
                public int top, left, width, height;
                public FaceRectangle(int t, int l, int w, int h)
                {
                    top = t;
                    left = l;
                    width = w;
                    height = h;
                }
            }
            public string faceId;
            public FaceRectangle faceRectangle;
            public Face(string id, FaceRectangle fac)
            {
                faceId = id;
                faceRectangle = fac;
            }
        }

        Face[] faces;
        public AddFaceResponse(Face[] f)
        {
            faces = f;
        }
    }

这是我从visual studio得到的错误。

  

Newtonsoft.Json.JsonSerializationException:无法将当前JSON数组(例如[1,2,3])反序列化为类型   'App2.AddFaceResponse'因为类型需要JSON对象(例如   {“name”:“value”})正确反序列化

2 个答案:

答案 0 :(得分:4)

您正在将数组反序列化为对象。你可以使用它;

var faces = JsonConvert.DeserializeObject<Face[]>(responseContentStr);

或者用另一对荣誉{}包装你的JSON字符串,并添加一个属性;

{"faces":[.. your JSON string ..]}

答案 1 :(得分:2)

提高了Kolky的答案,您可以将反序列化的数据接收到数组中

    Face[] faces = JsonConvert.DeserializeObject<Face[]>(responseContentStr);