GVKun编程网logo

无法将JSON数组(例如[1,2,3])反序列化为类型'',因为该类型需要JSON对象(例如{“ name”:“ value”})才能正确反序列化

23

针对无法将JSON数组和例如[1,2,3]反序列化为类型'',因为该类型需要JSON对象这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展C#dynamic类型序列化和反序列化之Newtons

针对无法将JSON数组例如[1,2,3]反序列化为类型'',因为该类型需要JSON对象这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展C# dynamic类型序列化和反序列化之Newtonsoft.Json、C# dynamic类型序列化和反序列化之Newtonsoft.Json,动态解析远端返回的jSON数据、C# Json反序列化 数据协定类型 无法反序列化 因为未找到必需的数据成员、c# – 反序列化数组不支持JSON反序列化类型等相关知识,希望可以帮助到你。

本文目录一览:

无法将JSON数组(例如[1,2,3])反序列化为类型'',因为该类型需要JSON对象(例如{“ name”:“ value”})才能正确反序列化

无法将JSON数组(例如[1,2,3])反序列化为类型'',因为该类型需要JSON对象(例如{“ name”:“ value”})才能正确反序列化

我有这个JSON:

[    {        "Attributes": [            {                "Key": "Name",                "Value": {                    "Value": "Acc 1",                    "Values": [                        "Acc 1"                    ]                }            },            {                "Key": "Id",                "Value": {                    "Value": "1",                    "Values": [                        "1"                    ]                }            }        ],        "Name": "account",        "Id": "1"    },    {        "Attributes": [            {                "Key": "Name",                "Value": {                    "Value": "Acc 2",                    "Values": [                        "Acc 2"                    ]                }            },            {                "Key": "Id",                "Value": {                    "Value": "2",                    "Values": [                        "2"                    ]                }            }        ],        "Name": "account",        "Id": "2"    },    {        "Attributes": [            {                "Key": "Name",                "Value": {                    "Value": "Acc 3",                    "Values": [                        "Acc 3"                    ]                }            },            {                "Key": "Id",                "Value": {                    "Value": "3",                    "Values": [                        "3"                    ]                }            }        ],        "Name": "account",        "Id": "2"    }]

我有这些课程:

public class RetrieveMultipleResponse{    public List<Attribute> Attributes { get; set; }    public string Name { get; set; }    public string Id { get; set; }}public class Value{    [JsonProperty("Value")]    public string value { get; set; }    public List<string> Values { get; set; }}public class Attribute{    public string Key { get; set; }    public Value Value { get; set; }}

我正在尝试使用以下代码反序列化上述JSON:

var objResponse1 = JsonConvert.DeserializeObject<RetrieveMultipleResponse>(JsonStr);

但我收到此错误:

无法将当前JSON数组(例如[1,2,3])反序列化为类型’test.Model.RetrieveMultipleResponse’,因为该类型需要JSON对象(例如{“
name”:“ value”})才能正确反序列化。要解决此错误,可以将JSON更改为JSON对象(例如{“ name”:“
value”}),也可以将反序列化类型更改为数组,或者将实现集合接口的类型(例如ICollection,IList)更改为List,例如List从JSON数组反序列化。还可以将JsonArrayAttribute添加到类型中,以强制其从JSON数组反序列化。路径’‘,第1行,位置1。

答案1

小编典典

您的json字符串包装在方括号([])中,因此将其解释为数组而不是单个RetrieveMultipleResponse对象。因此,您需要对其反序列化以键入的集合RetrieveMultipleResponse,例如:

var objResponse1 =     JsonConvert.DeserializeObject<List<RetrieveMultipleResponse>>(JsonStr);

C# dynamic类型序列化和反序列化之Newtonsoft.Json

C# dynamic类型序列化和反序列化之Newtonsoft.Json

原文: C# dynamic类型序列化和反序列化之Newtonsoft.Json

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011127019/article/details/76339170

一、说明

1.Newtonsoft.Json 中的Linq To Json中提供了方便的json数据查询、修改等操作。

例如:JObject,JArray

2.在JObject.FromObject()或JArray.FromObject()中也提供了对dynamic类型的支持。

二、dynamic转json字符串处理

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
1.使用JObject对象

dynamic obj = new JObject();
obj.name = "张三丰";
obj.age = 10;
obj.birthday = DateTime.Now;

Console.WriteLine(obj.ToString());

输出结果:

{
  "name": "张三丰",
  "age": 10,
  "birthday": "2017-07-29T16:39:47.4549601+08:00"
}

2.使用JObject.FromObject()

dynamic obj = new System.Dynamic.ExpandoObject();
obj.name = "张三丰";
obj.age = 10;
obj.birthday = DateTime.Now;

string result = JObject.FromObject(obj).ToString();
Console.WriteLine(result);
输出结果:同上

三、将json字符串发序列化为dynamic类型

string json = @"
            {
            ''Title'': ''Json.NET is awesome!'',
            ''Author'': {
                ''Name'': ''James Newton-King'',
                ''Twitter'': ''@JamesNK'',
                ''Picture'': ''/jamesnk.png''
            },
            ''Date'': ''2013-01-23T19:30:00'',
            ''BodyHtml'': ''<h3>Title!</h3>\r\n<p>Content!</p>''
            }
        ";
dynamic blogPost = JObject.Parse(json);
string title = blogPost.Title;
Console.WriteLine(title);      //输出:Json.NET is awesome!
Console.WriteLine(blogPost.Date); //输出:2013/1/ 23 19:30:00

官方示例:

Querying JSON with dynamicCreate JSON with dynamic

更多:

C# Newtonsoft.Json JsonSerializerSettings配置序列化操作

C#Json序列化、反序列化之Dictionary 字典类型

C# Newtonsoft.Json之LINQ To Json实例(二)

C# dynamic类型序列化和反序列化之Newtonsoft.Json,动态解析远端返回的jSON数据

C# dynamic类型序列化和反序列化之Newtonsoft.Json,动态解析远端返回的jSON数据

一、说明

1.Newtonsoft.Json 中的Linq To Json中提供了方便的json数据查询、修改等操作。

例如:JObject,JArray

2.在JObject.FromObject()或JArray.FromObject()中也提供了对dynamic类型的支持。

二、dynamic转json字符串处理

 

  1.  
    using Newtonsoft.Json;
  2.  
    using Newtonsoft.Json.Linq;

1.使用JObject对象

 

  1.  
    dynamic obj = new JObject();
  2.  
    obj.name = "张三丰";
  3.  
    obj.age = 10;
  4.  
    obj.birthday = DateTime.Now;
  5.  
     
  6.  
    Console.WriteLine(obj.ToString());

输出结果:

 

  1.  
    {
  2.  
    "name": "张三丰",
  3.  
    "age": 10,
  4.  
    "birthday": "2017-07-29T16:39:47.4549601+08:00"
  5.  
    }


2.使用JObject.FromObject()

 

  1.  
    dynamic obj = new System.Dynamic.ExpandoObject();
  2.  
    obj.name = "张三丰";
  3.  
    obj.age = 10;
  4.  
    obj.birthday = DateTime.Now;
  5.  
     
  6.  
    string result = JObject.FromObject(obj).ToString();
  7.  
    Console.WriteLine(result);

输出结果:同上

三、将json字符串发序列化为dynamic类型

 

  1.  
    string json = @"
  2.  
    {
  3.  
    ''Title'': ''Json.NET is awesome!'',
  4.  
    ''Author'': {
  5.  
    ''Name'': ''James Newton-King'',
  6.  
    ''Twitter'': ''@JamesNK'',
  7.  
    ''Picture'': ''/jamesnk.png''
  8.  
    },
  9.  
    ''Date'': ''2013-01-23T19:30:00'',
  10.  
    ''BodyHtml'': ''<h3>Title!</h3>\r\n<p>Content!</p>''
  11.  
    }
  12.  
    ";
  13.  
    dynamic blogPost = JObject.Parse(json);
  14.  
    string title = blogPost.Title;
  15.  
    Console.WriteLine(title); //输出:Json.NET is awesome!
  16.  
    Console.WriteLine(blogPost.Date); //输出:2013/1/ 23 19:30:00


官方示例:

Querying JSON with dynamicCreate JSON with dynamic

更多:

C# Newtonsoft.Json JsonSerializerSettings配置序列化操作

C#Json序列化、反序列化之Dictionary 字典类型

C# Newtonsoft.Json之LINQ To Json实例(二)

 

C# Json反序列化 数据协定类型 无法反序列化 因为未找到必需的数据成员

C# Json反序列化 数据协定类型 无法反序列化 因为未找到必需的数据成员

背景今天在使用:c# json 序列化与反序列化

反序列化的时候出现了下面的错误信息。

System.Runtime.Serialization.SerializationException: 数据协定类型“TestEntity”无法反序列化,因为未找到必需的数据成员“multipleChoice, runTimeDisplayColumns”。

在 System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value)
登录后复制


具体原因是:我在反序列化的实体类中新加了两个属性:

private bool multipleChoice;
        /// <summary>
        /// 帮助引擎是否允许多选
        /// </summary>     
        [XmlIgnore]
        [Browsable(false)]
        public bool MultipleChoice
        {
            get
            {
                return multipleChoice;
            }
            set
            {
                multipleChoice = value;
            }
        }

        private string runTimeDisplayColumns;
        /// <summary>
        /// 帮助引擎运行时显示的列
        /// </summary>     
        [XmlIgnore]
        [Browsable(false)]
        public string RunTimeDisplayColumns
        {
            get
            {
                return runTimeDisplayColumns;
            }
            set
            {
                runTimeDisplayColumns = value;
            }
        }
登录后复制

在使用之前保存的Json串反序列化的时候,新增的两个两个属性,没有对应的值,所以报出了上面的错误。

解决方法:

[DataContract]
public class TestEntity
{
		private bool multipleChoice;
        /// <summary>
        /// 帮助引擎是否允许多选
        /// </summary>     
        [XmlIgnore]
        [Browsable(false)]
		[DataMember(IsRequired = false)]
        public bool MultipleChoice
        {
            get
            {
                return multipleChoice;
            }
            set
            {
                multipleChoice = value;
            }
        }

        private string runTimeDisplayColumns;
        /// <summary>
        /// 帮助引擎运行时显示的列
        /// </summary>     
        [XmlIgnore]
        [Browsable(false)]
		[DataMember(IsRequired = false)]
        public string RunTimeDisplayColumns
        {
            get
            {
                return runTimeDisplayColumns;
            }
            set
            {
                runTimeDisplayColumns = value;
            }
        }
}
登录后复制

通过DataMember(IsRequired = false)属性表面此属性,不是必须的。这样的话,保证了在反序列化的时候,即使JSON串内缺少该属性的定义能正常反序列化。

小注:

在属性上添加DataMember(IsRequired = false)后,对应的类上必须添加 [DataContract]标识。


以上就是以上就是的内容。的内容。

c# – 反序列化数组不支持JSON反序列化类型

c# – 反序列化数组不支持JSON反序列化类型

我已经阅读了其他关于反序列化错误的两篇文章,但是我没有在任何地方发布自己的问题.

我有一个返回JSON的WCF服务.在反序列化特定类型时,它失败.

为了让您轻松地复制错误,我已经对下面的JSON进行了硬编码.

基本上你应该可以复制/粘贴下面的代码看到它失败.

消费者需要反序列化为工作对象. s.Deserialize失败,标题中提到错误消息.

注意:我知道我的JSON中有斜杠.那些在那里为方便的逃避报价.谢谢.

示例代码:

var s = new JavaScriptSerializer();

        var jstr =
            "[{\"UserId\":1,\"WorkoutId\":1,\"WorkoutInfo\":[\"Step 1\",\"Step 2\"]},{\"UserId\":2,\"WorkoutId\":2,\"WorkoutInfo\":[\"Step 1a\",\"Step 2a\"]},{\"UserId\":5,\"WorkoutId\":0,\"WorkoutInfo\":[\"new work1\",\"new work 1\",\"new work 1\"]}]";

        Workout blah = s.Deserialize<Workout>(jstr);
        var response = ServicePOST<Workout>("AddUserWorkout",workout);

和锻炼班:

public class Workout
{
    public int UserId { get; set; }
    public List<string> WorkoutInfo { get; set; }
}

解决方法

问题是你告诉序列化器它只是一个单一的锻炼,而不是它们的列表/数组.这样做:
var blah = s.Deserialize<List<Workout>>(jstr);

这与您的问题没有直接关系,但如果可能,建议您使用Json.NET而不是JavaScriptSerializer.

关于无法将JSON数组例如[1,2,3]反序列化为类型'',因为该类型需要JSON对象的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于C# dynamic类型序列化和反序列化之Newtonsoft.Json、C# dynamic类型序列化和反序列化之Newtonsoft.Json,动态解析远端返回的jSON数据、C# Json反序列化 数据协定类型 无法反序列化 因为未找到必需的数据成员、c# – 反序列化数组不支持JSON反序列化类型等相关知识的信息别忘了在本站进行查找喔。

本文标签: