我有以下JSON片段:
[{
"name": "numToRetrieve",
"value": "3",
"label": "Number of items to retrieve:",
"items": {
"1": "1",
"3": "3",
"5": "5"
},
"rules": {
"range": "1-2"
}
},
{
"name": "showFoo",
"value": "on",
"label": "Show foo?"
},
{
"name": "title",
"value": "Foo",
"label": "Foo:"
}]
全部在一个行版本中(适用于字符串文字):
[{\"name\":\"numToRetrieve\",\"value\":\"3\",\"label\":\"Number of items to retrieve:\",\"items\":{\"1\":\"1\",\"3\":\"3\",\"5\":\"5\"},\"rules\":{\"range\":\"1-2\"}},{\"name\":\"showFoo\",\"value\":\"on\",\"label\":\"Show foo?\"},{\"name\":\"title\",\"value\":\"Foo\",\"label\":\"Foo:\"}]
在上述例子中,name
,value
,和label
被需要的,但是items
和rules
是可选的。
这是我要反序列化的课程:
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization;
namespace foofoo
{
[DataContract]
public sealed class FooDef
{
[DataMember(Name = "name", IsRequired = true)]
public string Name { get; set; }
[DataMember(Name = "value", IsRequired = true)]
public string Value { get; set; }
[DataMember(Name = "label", IsRequired = true)]
public string Label { get; set; }
[DataMember(Name = "items", IsRequired = false)]
public Dictionary<string, string> Items { get; set; }
[DataMember(Name = "rules", IsRequired = false)]
public Dictionary<string, string> Rules { get; set; }
}
}
这是我用来反序列化的代码:
var json = new DataContractJsonSerializer(typeof(List<FooDef>));
var bar = "[{\"name\":\"numToRetrieve\",\"value\":\"3\",\"label\":\"Number of items to retrieve:\",\"items\":{\"1\":\"1\",\"3\":\"3\",\"5\":\"5\"},\"rules\":{\"range\":\"1-2\"}},{\"name\":\"showFoo\",\"value\":\"on\",\"label\":\"Show foo?\"},{\"name\":\"title\",\"value\":\"Foo\",\"label\":\"Foo:\"}]";
var stream = new MemoryStream(Encoding.UTF8.GetBytes(bar));
var foo = json.ReadObject(stream);
stream.Close();
除此以外,一切都进行得相当顺利,items
并且rules
第一次FooDef
通过时都是空的。我曾尝试一切在阳光下,试图让他们填充:自定义类,NameValueCollection
,KeyValuePair<string, string>
,List
无论是后者,和所有其他的集合,似乎适用的。[编辑:我忘记尝试了Hashtable
,这似乎是显而易见的候选人。没用。]
这个问题,在我看来,是在关键件items
和rules
是开放式的。也就是说,它并不总是被称为range
or 3
。有什么建议或想法吗?
恕我直言,无法使用DataContractJsonSerializer将提供的JSON字符串反序列化为.NET类。
问题来自DataContractJsonSerializer序列化字典的方式。您可以使用替代的序列化程序,例如Json.NET(强烈推荐)或JavaScriptSerializer(我认为不建议使用该序列化程序,而推荐使用DataContractJsonSerializer,但它适用于您的方案)。
您还可以阅读这些 言论。
文档: 序列化集合-
Json.NET
问题内容: 我有以下形式的JSON字符串: 我正在尝试使用带有以下代码段的C#.NET反序列化器DataContractJsonSerializer反序列化JSON 现在,由于JSON数组是变量类型的数组,所以我不知道对象X应该是哪种类型 如果我的弦是 我可以用这个: 那对我有用。我想知道是否有任何方法可以反序列化变量类型JSON数组? 问题答案: 您可以使用Json.NET做到这一点。 JArr
好的,我做了更改,下面是我得到的JSON响应 它现在导致一个嵌套异常是java.lang.IllegalArgumentException:参数类型不匹配 NestedServletException:请求处理失败;嵌套异常是java.lang.IllegalArgumentException:参数类型不匹配org.springframework.web.servlet.framework.ser
问题内容: 我确定这个问题已经被一遍又一遍地询问了,但是由于某种原因,我仍然无法设法解决这个问题。 我想反序列化包含单个成员的JSON对象;字符串数组: 这是我要反序列化的类: 这是反序列化方法: 像这样的调用返回的初始化实例,但数组保持不变。 的结构有问题吗? 问题答案: 嗯,发布此消息后,我意识到我缺少以下属性的修饰: 现在工作正常。
问题内容: 每当我尝试序列化文件时,都会收到错误消息:FileNotFound。不知道为什么。这是我的FileHelper代码: 问题答案:
目前,我正在使用Avro1.8.0序列化/反序列化对象,但面临一些问题,特别是java.util.Map对象。不面临其他类型对象的问题。 这里的示例代码- 在deserialize方法中,我试图根据输入数据获取模式,但avro抛出错误- 多谢了。