gpt4 book ai didi

c# - 输入字符串不是有效数字 - JSON 反序列化

转载 作者:行者123 更新时间:2023-11-30 18:20:38 25 4
gpt4 key购买 nike

我有这个数组:

{
"AssemblyVersion":"0.1.333.5973",
"Exception":
{
// [...]
}
}

从这个类序列化:

public class ErrorData
{
public string AssemblyVersion { get; private set; }
public Exception Exception { get; private set; }

public ErrorData(string assemblyVersion, Exception ex)
{
AssemblyVersion = assemblyVersion;
Exception = ex;
}

public override string ToString()
{
return JsonConvert.SerializeObject(this);
}
}

将其序列化回对象会产生以下异常:

Newtonsoft.Json.JsonReaderException: Input string '0.1.335.5973' is not a valid number. Path 'AssemblyVersion', line 1, position 29.
at Newtonsoft.Json.JsonTextReader.ParseNumber(ReadType readType)
at Newtonsoft.Json.JsonTextReader.ReadStringValue(ReadType readType)
at Newtonsoft.Json.JsonTextReader.ReadAsString()
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader, JsonContract contract, Boolean hasConverter)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ResolvePropertyAndCreatorValues(JsonObjectContract contract, JsonProperty containerProperty, JsonReader reader, Type objectType)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObjectUsingCreatorWithParameters(JsonReader reader, JsonObjectContract contract, JsonProperty containerProperty, ObjectConstructor`1 creator, String id)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateNewObject(JsonReader reader, JsonObjectContract objectContract, JsonProperty containerMember, JsonProperty containerProperty, String id, Boolean& createdFromNonDefaultCreator)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)

简而言之,我使用覆盖的 ToString() 方法将 ErrorData 实例序列化为 json 字符串,将结果作为命令行参数传递给子进程,子进程将其反序列化回一个 ErrorData 实例。

我错过了什么?似乎 AssemblyVersion 字符串被视为数字而不是字符串。

编辑:

我以这种方式反序列化它:

ErrorData errorData = JsonConvert.DeserializeObject<ErrorData>(args[0]);

序列化已经在上面的代码中展示了,我将它实现到 ToString() 方法中。

我可以验证它是否发生,因为我将数组作为命令行参数传递。此处的代码有效:

ErrorData errorData = Json.DeserializeObject<ErrorData>(new ErrorData("", new Exception()).ToString());

最佳答案

我建议你检查你的输入,因为下面的代码会抛出无效数字的异常:

JsonConvert.DeserializeObject<ErrorData>("{'AssemblyVersion':0.1.333.5973,'Exception':{}}");

但是如果你引用AssemblyVersion的值,那么反序列化就会成功:

JsonConvert.DeserializeObject<ErrorData>("{'AssemblyVersion':'0.1.333.5973','Exception':{}}");

关于c# - 输入字符串不是有效数字 - JSON 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37102862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com