亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將嵌套的復雜 json 對象反序列化為一個字符串 c#

將嵌套的復雜 json 對象反序列化為一個字符串 c#

C#
DIEA 2021-11-21 10:57:32
我有 JSON,它看起來像:{  "name": "foo",  "settings": {    "setting1": true,    "setting2": 1  }}  我知道如何使用 json2csharp.com 創建 C# 類來反序列化它。它們看起來像:public class Settings{    public bool settings1 { get; set; }    public int settings2 { get; set; }}public class RootObject{    public string name { get; set; }    public Settings settings { get; set; }}但我想要的是簡單地將其反序列化為public class RootObject{    public string name { get; set; }    public string settings { get; set; }}即,所有“設置”JSON 只需要保存為字符串——該 JSON 的結構不一致。那怎么辦呢?謝謝!
查看完整描述

3 回答

?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

您可以在反序列化期間使用 aJToken來捕獲您的未知數settings,然后使用第二個屬性來允許您在需要時以字符串形式訪問該 JSON。


像這樣設置你的類:


public class RootObject

{

    [JsonProperty("name")]

    public string Name { get; set; }


    [JsonIgnore]

    public string Settings

    {

        get { return SettingsToken != null ? SettingsToken.ToString(Formatting.None) : null; }

        set { SettingsToken = value != null ? JToken.Parse(value) : JValue.CreateNull(); }

    }


    [JsonProperty("settings")]

    private JToken SettingsToken { get; set; }

}

然后像往常一樣反序列化:


var root = JsonConvert.DeserializeObject<RootObject>(json);

該Settings屬性將包含settingsJSON的一部分作為字符串。如果您將對象重新序列化回 JSON,那么settings它將保留它之前的任何結構。


您還可以將該Settings屬性更改為其他一些 JSON 字符串,只要它格式正確。(如果不是,則將立即拋出異常。)


這是一個往返演示:https : //dotnetfiddle.net/thiaWk


查看完整回答
反對 回復 2021-11-21
?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

嘗試使用 Newtonsoft.Json 和 LINQ:


string jsonText = @"{

            'name': 'foo',

            'settings': {

                'settings1': true,

                'settings2': 1

                }

            }";


JObject jObj = JObject.Parse(jsonText);

var setting = jObj.Descendants()

                .OfType<JProperty>()

                .Where(p => p.Name == "settings")

                .First()

                .Value.ToObject<Settings>();


查看完整回答
反對 回復 2021-11-21
?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

嘗試這個:


public class RootObject

        {

            public string name { get; set; }

            public Dictionary<string,object> settings { get; set; }

        }

小提琴:https : //dotnetfiddle.net/QN3nWL


查看完整回答
反對 回復 2021-11-21
  • 3 回答
  • 0 關注
  • 402 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號