反序列化 JSON 假定对象为字符串的字符串
Deserialize JSON string that supposed for object as string
我需要序列化一个JSON的字符串。但是在这个字符串中,它包含了我想序列化为字符串的对象。
看看这个JSON字符串
{
"action":"applyPromo",
"params":
[
{
"transacId":"M123238831",
"promotionId":16,
"promotionTypeId":1,
"amount":100,
"transacTime":"2021-03-19T12:00:30.045+10:00"
}
]
}
因为动作可以是任何东西,我需要将 params 存储为一个字符串,它将在其他地方反序列化。
这是我的 class:
public class RequestAction
{
public string action { get; set; }
public string params { get; set; }
public RequestAction()
{
action = params = string.Empty;
}
}
当我尝试使用 JSON (Newtonsoft) 反序列化字符串时,出现此错误:Unexpected character encountered while parsing value: [. Path 'params', line 1, position 27.'
.
这是我反序列化 JSON String
的代码
public static RequestAction Parse(str)
{
return JsonConvert.DeserializeObject<RequestAction>(str);
}
知道如何将 params
反序列化为字符串吗?
好的解决方案:
如果要保留 json 结构,可以将类型更改为 JToken
。然后 Newtonsoft.Json 将原始 json 存储在那里,你不会丢失任何关于转换的信息。
备选方案:
您可以实施自定义 json 转换器。
public class ObjectTostringConverter : JsonConverter<string>
{
public override bool CanRead => true;
public override bool CanWrite => true;
public override string ReadJson(JsonReader reader, Type objectType, string existingValue, bool hasExistingValue, JsonSerializer serializer)
{
var data = JToken.ReadFrom(reader);
return data.ToString();
}
public override void WriteJson(JsonWriter writer, string value, JsonSerializer serializer)
{
writer.WriteRaw(value);
}
}
并标记属性以使用此转换器
[JsonConverter(typeof(ObjectTostringConverter))]
public string Params { get; set; }
如果我理解正确,您需要 params
属性 作为原始字符串。实现此目的的一种方法是使用 JToken:
public class RequestAction
{
public string Action { get; set; } = string.Empty;
public JToken Params { get; set; }
}
我需要序列化一个JSON的字符串。但是在这个字符串中,它包含了我想序列化为字符串的对象。
看看这个JSON字符串
{
"action":"applyPromo",
"params":
[
{
"transacId":"M123238831",
"promotionId":16,
"promotionTypeId":1,
"amount":100,
"transacTime":"2021-03-19T12:00:30.045+10:00"
}
]
}
因为动作可以是任何东西,我需要将 params 存储为一个字符串,它将在其他地方反序列化。
这是我的 class:
public class RequestAction
{
public string action { get; set; }
public string params { get; set; }
public RequestAction()
{
action = params = string.Empty;
}
}
当我尝试使用 JSON (Newtonsoft) 反序列化字符串时,出现此错误:Unexpected character encountered while parsing value: [. Path 'params', line 1, position 27.'
.
这是我反序列化 JSON String
的代码public static RequestAction Parse(str)
{
return JsonConvert.DeserializeObject<RequestAction>(str);
}
知道如何将 params
反序列化为字符串吗?
好的解决方案:
如果要保留 json 结构,可以将类型更改为 JToken
。然后 Newtonsoft.Json 将原始 json 存储在那里,你不会丢失任何关于转换的信息。
备选方案:
您可以实施自定义 json 转换器。
public class ObjectTostringConverter : JsonConverter<string>
{
public override bool CanRead => true;
public override bool CanWrite => true;
public override string ReadJson(JsonReader reader, Type objectType, string existingValue, bool hasExistingValue, JsonSerializer serializer)
{
var data = JToken.ReadFrom(reader);
return data.ToString();
}
public override void WriteJson(JsonWriter writer, string value, JsonSerializer serializer)
{
writer.WriteRaw(value);
}
}
并标记属性以使用此转换器
[JsonConverter(typeof(ObjectTostringConverter))]
public string Params { get; set; }
如果我理解正确,您需要 params
属性 作为原始字符串。实现此目的的一种方法是使用 JToken:
public class RequestAction
{
public string Action { get; set; } = string.Empty;
public JToken Params { get; set; }
}