【问题标题】:JObject - adding new objects dynamicallyJObject - 动态添加新对象
【发布时间】:2018-01-28 15:24:40
【问题描述】:

我有一个这样的 JObject:

JObject grid =
            new JObject(
            new JProperty("myprop", "value 1"),
            new JProperty("name", 
                new JArray(
                                new JObject(
                        new JProperty("myprop2", "value 2")
                    )
                )
            )
        )

没有错。

但是,我有一个我想迭代的对象,并将它们添加到我的 JObject 中,但是该怎么做呢?

像这样? (这是无效的,我知道)

JObject grid =
            new JObject(
            new JProperty("myprop", "value 1"),
            new JProperty("name", 
                new JArray(
                                new JObject(
                        new JProperty("myprop2", "value 2"),
                        foreach(var value in myObject) {
                            new JObject(
                                new JProperty(value.Name, value.Value)
                            )   
                        }
                    )
                )
            )
        )

我该怎么做?

【问题讨论】:

    标签: c# asp.net json json.net


    【解决方案1】:

    如果您事先知道您的数组项,为什么不先创建它们?

    var myprop2Items = new List<JObject>();
    
    foreach(var value in myObject) {
                                myprop2Items.Add(new JObject(
                                    new JProperty(value.Name, value.Value)
                                ));
    
    } 
    
    
    JObject grid =
                new JObject(
                new JProperty("myprop", "value 1"),
                new JProperty("name", 
                    new JArray(
                                    new JObject(
                            new JProperty("myprop2", "value 2"),
                            myprop2Items
                            )
                        )
                    )
                )
            )
    

    【讨论】:

    • 如果它是空的怎么办 - 我该如何检查呢?所以我不应该添加一个,。添加最后一个属性的结尾
    • 您是要获取对象的成员还是同类对象的列表?您不能像在 JavaScript 中那样简单地迭代 C# 对象中的属性。您是否考虑过使用 Newtonsoft.Json 对 JSON 对象进行序列化和反序列化?
    【解决方案2】:

    您还可以向现有的 JObject 添加属性:

    var obj = new JObject();
    Console.WriteLine(obj.ToString()); // {}
    
    obj.Add("key", "value");
    Console.WriteLine(obj.ToString()); // {"key": "value"}
    

    【讨论】:

    • 但它不仅仅是属性 - 还有 JObjects 和 JArrays?
    • 是的,您不仅可以添加像字符串这样的原始标记,还可以添加对象和数组。
    猜你喜欢
    • 1970-01-01
    • 2016-08-02
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2014-09-08
    • 1970-01-01
    相关资源
    最近更新 更多