将对象的JSON字符串反序列化为字符串



我需要序列化一个JSON字符串。但在这个字符串中,它包含了我想序列化为字符串的对象。

看看这个JSON字符串

{
"action":"applyPromo",
"params":
[
{
"transacId":"M123238831",
"promotionId":16,
"promotionTypeId":1,
"amount":100,
"transacTime":"2021-03-19T12:00:30.045+10:00"
}
]
}

由于操作可以是任何东西,我需要将params存储为字符串,该字符串将在其他地方反序列化。

这是我的课:

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字符串进行反序列化的代码

public static RequestAction Parse(str)
{
return JsonConvert.DeserializeObject<RequestAction>(str);
}

知道如何将params反序列化为字符串吗?

如果我理解正确,您需要params属性作为原始字符串。实现这一点的一种方法是使用JToken:

public class RequestAction
{
public string Action { get; set; } = string.Empty;
public JToken Params { get; set; }
}

好的解决方案:

如果您想保留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; }

相关内容

  • 没有找到相关文章

最新更新