**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
2天前关闭。
Improve this question
我是一个新手与Json的东西。我有一个项目,正在使用牛顿软件。我有这个对象
'
namespace ConsoleApp1
{
[JsonObject(MemberSerialization.OptIn)]
public class Data
{
[JsonProperty]
public bool IsActive { get; set; } = false;
[JsonProperty]
public string Source { get; set; }
[JsonProperty]
public object SourceData { get; set; }
[JsonProperty]
public bool IsClickable { get; set; } = true;
[JsonConstructor]
public Data(string Source = "", string SourceData = "", bool IsActive = false, bool IsClickable = true)
{
this.IsActive = IsActive;
this.Source = Source;
this.SourceData = SourceData;
this.IsClickable = IsClickable;
}
}
class Program
{
static void Main(string[] args)
{
JsonSerializerSettings JsonSettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto, NullValueHandling = NullValueHandling.Ignore };
Data data = new Data() { IsActive = true, Source = "test", SourceData = new List<int> { 1, 2, 3 }, IsClickable = false };
string json = JsonConvert.SerializeObject(data, Formatting.Indented, JsonSettings);
Console.WriteLine(json);
Data dataDes = JsonConvert.DeserializeObject<Data>(json, JsonSettings);
Console.WriteLine(dataDes);
}
}
}
'
所以当它被序列化时,我得到了这个:
'
{
"IsActive": true,
"Source": "test",
"SourceData": {
"$type": "System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib]], System.Private.CoreLib",
"$values": [
1,
2,
3
]
},
"IsClickable": false
}
'
但是当它被反序列化时,我得到这个错误:Newtonsoft.Json.JsonReaderException:'分析值时遇到意外字符:{。路径“SourceData”,第4行,位置17。'
我是否忘记在某个地方设置一些东西,以使元数据在反序列化时工作?
2条答案
按热度按时间csga3l581#
为了反序列化你发布的json,你需要再创建一个类,在这个类正常工作之后
更新
既然你换了个问题,那也行
6pp0gazn2#
从您的问题来看,问题在于您如何在SourceData上使用对象属性。当Json进行序列化时,它足够聪明地检测到对象数据类型实际上是一个数组,并相应地处理它。
当对象被反序列化时,它阅读数据类型为“string”的构造函数,并试图将其反序列化为字符串,这就是为什么当它找到数组[而不是字符串“”的开头时会出错。
此修改后的构造函数应正常工作(使用MySkullCavelsADarkPlace注解进行调整)