簡體   English   中英

將應該用於 object 的 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"
        }
    ]
}

由於動作可以是任何東西,我需要將參數存儲為一個字符串,該字符串將在其他地方反序列化。

這是我的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM