针对无法将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”})才能正确反序列化
- C# dynamic类型序列化和反序列化之Newtonsoft.Json
- C# dynamic类型序列化和反序列化之Newtonsoft.Json,动态解析远端返回的jSON数据
- C# Json反序列化 数据协定类型 无法反序列化 因为未找到必需的数据成员
- c# – 反序列化数组不支持JSON反序列化类型
无法将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
一、说明
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数据
一、说明
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# 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反序列化类型
我有一个返回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反序列化类型等相关知识的信息别忘了在本站进行查找喔。
本文标签: