簡體   English   中英

強制 System.Text.Json 在 CamelCase 中反序列化

[英]Force System.Text.Json to deserialize in CamelCase

我正在嘗試使用 System.Text.Json 從 PascalCase 字符串中使用 camelCase 約定構建 JsonElement(或類似)。 有沒有辦法強制執行這種行為?

var jsonString = "{\"Property1\":\"s\", \"PropertyCamel\":{\"PropertyNested\":\"g\"}, \"PPP\":[{\"NestedList\":\"1\"}]}";
var deserialized = System.Text.Json.JsonSerializer.Deserialize<JsonElement>(jsonString,
    new JsonSerializerOptions
    {
        PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
        DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,
        PropertyNameCaseInsensitive = true
    });
var serialized = System.Text.Json.JsonSerializer.Serialize(
    deserialized,
    new JsonSerializerOptions
    {
        PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
        DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,
        PropertyNameCaseInsensitive = true
    });
// deserialized outputs property names in PascalCase

我也嘗試過反序列化-> 序列化-> 反序列化但沒有成功。

有沒有辦法這樣做?

參考這個答案,使用 Newtonsoft.Json

using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System.Dynamic;
    
var jsonString = "{\"Property1\":\"s\", \"PropertyCamel\":{\"PropertyNested\":\"g\"}, \"PPP\":[{\"NestedList\":\"1\"}]}";
                // won't work if I used json
                // var json = JsonConvert.DeserializeObject(jsonString);
                var interimObject = JsonConvert.DeserializeObject<ExpandoObject>(jsonString);
                var jsonSerializerSettings = new JsonSerializerSettings
                {
                    ContractResolver = new CamelCasePropertyNamesContractResolver()
                };
                var myJsonOutput = JsonConvert.SerializeObject(interimObject, jsonSerializerSettings);

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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