[英]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"
}
]
}
由於動作可以是任何東西,我需要將參數存儲為一個字符串,該字符串將在其他地方反序列化。
這是我的 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.'
Unexpected character encountered while parsing value: [. Path 'params', line 1, position 27.'
.
這是我反序列化 JSON 字符串的代碼
public static RequestAction Parse(str)
{
return JsonConvert.DeserializeObject<RequestAction>(str);
}
知道如何將params
反序列化為字符串嗎?
很好的解決方案:
如果要保留 json 結構,可以將 type 更改為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; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.