有没有一种方法可以正确地反序列化以双引号开头和结尾的JSON字符串?
数据以流的形式输入(来自AWS S3对象)。这是流的内容(注意开头和结尾的双引号字符):
"[{\"startTime\":1610396717400,\"eventCode\":44,\"eventParam\":5},{\"startTime\":1610396717700,\"eventCode\":81,\"eventParam\":56},{\"startTime\":1610396717800,\"eventCode\":44,\"eventParam\":4}]"
JsonSerializer似乎没有正确地反序列化它。但是,对于以下内容,其工作原理与预期一致:
[{"startTime":1610396717400,"eventCode":44,"eventParam":5},{"startTime":1610396717700,"eventCode":81,"eventParam":56}]
以下是片段:
public class ControllerEventJson
{
[JsonProperty("startTime")]
public long StartTime { get; set; }
[JsonProperty("eventCode")]
public int EventCode { get; set; }
[JsonProperty("eventParam")]
public int EventParam { get; set; }
}
class Program
{
static void Main(string[] args)
{
// stream is a MemoryStream
using (StreamReader sr = new StreamReader(stream))
using (JsonTextReader reader = new JsonTextReader(sr))
{
// Required for large JSON objects to avoid errors when streaming
reader.SupportMultipleContent = true;
JsonSerializer serializer = new JsonSerializer();
while (reader.Read())
{
// Deserialize each object in array individually
if (reader.TokenType == JsonToken.StartObject)
{
var obj = serializer.Deserialize<ControllerEventJson>(reader);
// Do something with obj
}
}
}
}
}
你可以试试这个。这是在Visual Studio中测试的,运行正常
Dictionary<string, string> items = null;
var list = new List<Dictionary<string, string>>();
...... your code
using (JsonTextReader reader = new JsonTextReader(sr))
{
reader.SupportMultipleContent = true;
Item item = null;
while (reader.Read())
{
switch (reader.TokenType)
{
case JsonToken.StartArray:
items = new Dictionary<string, string>();
continue;
case JsonToken.StartObject:
item = new Item();
break;
case JsonToken.PropertyName:
item.Key = reader.Value.ToString();
break;
case JsonToken.EndObject:
list.Add(items);
items = new Dictionary<string, string>();
break;
case JsonToken.Integer:
item.Value = reader.Value.ToString();
if (item != null) items.Add(item.Key, item.Value);
item = new Item();
break;
}
}
}
var json = JsonConvert.SerializeObject(list);
var jd = JsonConvert.DeserializeObject(json, typeof( List<ControllerEventJson>));
后果
[
{
"startTime": 1610396717400,
"eventCode": 44,
"eventParam": 5
},
{
"startTime": 1610396717700,
"eventCode": 81,
"eventParam": 56
},
{
"startTime": 1610396717800,
"eventCode": 44,
"eventParam": 4
}
]
班
public class Item
{
public string Key { get; set; }
public string Value { get; set; }
}
问题内容: 我有这个字符串: 我正在反序列化对象: 该对象看起来像: 并尝试创建字典: 但得到。 可能是什么问题? 问题答案: 请参阅mridula的答案,了解为什么您会得到null。但是,如果您想直接将json字符串转换为字典,则可以尝试以下代码段。
问题内容: 我有以下类,它是由Jackson映射的(简化版): 在某些情况下,服务器会返回,然后我想将name设置为空的Java String。 是否有任何Jackson注释,或者如果属性为,我应该只检查getter中的null并返回空字符串? 问题答案: 您可以在默认构造函数中或声明时进行设置: 要么
我有以下由Jackson映射的类(简化版): 在某些情况下,服务器返回,然后我想将name设置为空Java字符串。 是否有任何Jackson注释,或者如果属性为,我应该只检查getter中的null并返回空字符串吗?
本文向大家介绍C#实现JSON字符串序列化与反序列化的方法,包括了C#实现JSON字符串序列化与反序列化的方法的使用技巧和注意事项,需要的朋友参考一下 C#将对象序列化成JSON字符串 这里主要是使用JavaScriptSerializer来实现序列化操作,这样我们就可以把对象转换成Json格式的字符串,生成的结果如下: 如何将Json字符串转换成对象使用呢? 在实际开发中,经常有可能遇到用JS传
问题内容: 类型1(docs链接): 类型2(docs链接): 尽管以上两种类型都能完成任务,但这些实现之间有什么区别? 问题答案: 构造之后,两者都调用相同的反序列化功能,因此唯一的区别是泛型类型的处理方式。 第二个是完全静态的,因此类型必须在编译类型中是已知的,并且不能改变。因此,它类似于使用基本Class文字。 第一个是动态的,因此可以用于构造因其参数设置而变化的事物。 就我个人而言,我更喜
我有一个这样的财产: 我需要在其他类中解析时将其作为字符串 但这里是布尔值。 我想我需要做这样的事情。 还有一个像这样的班级 但找不到合适的例子。 这也是