小编Bri*_*ers的帖子

如何解析嵌套的JSON数据结构

在Windows Phone应用程序中,我需要解析JSON数据.我能够获得未嵌套的键的值.但是如果JSON在数组中有数组,那么如何从JSON文件中提取值呢?

在过去,我所做的是将JSON解析为JArray对象,然后从JToken获得指定字符串键的值.

在下面的JSON中,peoplemenwomen,并且men本身有许多具有不同ID的人.因此,如果我将这个完整的东西作为JSON字符串,我如何打印特定人的ID的值?如果这里没有嵌套数组,我本可以转换为JArray并访问索引值,但现在该怎么做?

这是我的JSON:

{
    "people": [
        {
            "men": [
                {
                    "id": 0,
                    "name": "alex",
                    "age": 25
                },
                {
                    "id": 1,
                    "name": "bob",
                    "age": 26
                },
                {
                    "id": 2,
                    "name": "charlie",
                    "age": 27
                }
            ]
        },
        {
            "women": [
                {
                    "id": 0,
                    "name": "alexys",
                    "age": 25
                },
                {
                    "id": 1,
                    "name": "bethany",
                    "age": 26
                },
                {
                    "id": 2,
                    "name": "catherine",
                    "age": 27
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

c# json json.net windows-phone-8.1

4
推荐指数
1
解决办法
2万
查看次数

序列化列表时显示 JSON 中的索引值

我有一个包含项目列表的类。当我序列化该类时,我希望项目索引值出现在 JSON 中。

我正在使用以下代码转换为 JSON:

var json = Newtonsoft.Json.JsonConvert.SerializeObject(imp);
Run Code Online (Sandbox Code Playgroud)

现在我得到的输出如下所示:

{
    "userdata":{
        "name":"name",
        "type":"type",
        "company_name":"company_name"
    },
    "f_item":null,
    "o_item":null,
    "attributes":[
        {
            "firstval":"0",
            "name":"at 0",
            "opposite_name":"opname 0"
        },
        {
            "firstval":"1",
            "name":"at 1",
            "opposite_name":"opname 1"
        },
        {
            "firstval":"2",
            "name":"at 2",
            "opposite_name":"opname 2"
        },
        {
            "firstval":"3",
            "name":"at 3",
            "opposite_name":"opname 3"
        },
        {
            "firstval":"4",
            "name":"at 4",
            "opposite_name":"opname 4"
        }
    ],
    "eos":null
}
Run Code Online (Sandbox Code Playgroud)

我需要这样的输出:

{
    "userdata":{
        "name":"name",
        "type":"type",
        "company_name":"company_name"
    },
    "f_item":null,
    "o_item":null,
    "attributes":{
        "0": {
            "firstval":"0",
            "name":"at 0",
            "opposite_name":"opname 0"
        },
        "1": {
            "firstval":"1",
            "name":"at 1", …
Run Code Online (Sandbox Code Playgroud)

c# json json.net

4
推荐指数
1
解决办法
2705
查看次数

使用 Json.NET 序列化泛型类中的受保护属性

我正在尝试序列化一个由许多继承自IMyDataType.

public abstract class IMyDataType<T>
{
    protected virtual T Data { get; set; }
    public abstract String ToString(String args = null);
    public abstract Boolean SetValue(T newValue);
    public abstract Boolean CheckValue(T newValue);
    public abstract T GetValue();
}
Run Code Online (Sandbox Code Playgroud)

例如我可能有一堂课MyInteger

public class MyInteger : IMyDataType<int>
{
    public int Min { get; protected set; }
    public int Max { get; protected set; }
    protected override int Data { get; set; }

    public MyInteger(int value)
    {
        Min = int.MinValue;
        Max = int.MaxValue; …
Run Code Online (Sandbox Code Playgroud)

c# serialization json json.net

4
推荐指数
1
解决办法
6995
查看次数

如何在JSON中为空DataTable包含列元数据

如何在JSON中正确描述列元数据,以后由Newtonsoft解析以构建ac#DataTable,这样我希望解决一个问题,即获取没有行的DataTable,但也没有列我需要列的列当我传递一个空表时,使用标签创建并希望使用数据类型.

标准输入的示例:

{

"BrokerID" : "998",
"AccountID" : "1313",
"Packages":[
                  {

                    "PackageID": 226,
                    "Amount": 15000,
                    "Auto_sync": true,
                    "Color": "BLUE"

                  },
                  {

                    "PackageID": 500,
                    "Amount": 15000,
                    "Auto_sync": true,
                    "Color": "PEACH"

                  }

           ]
}
Run Code Online (Sandbox Code Playgroud)

输入空表的示例:{"BrokerID":"998","AccountID":"1313","包":[]}

当我使用解析时, JsonConvert.DeserializeObject<DataTable>(params["Packages"]);我没有得到任何行,显然没有列,我正在寻找一种方法来描述json主体中的列元数据.

c# datatable json json.net

4
推荐指数
1
解决办法
2523
查看次数

如何将树过滤到共同父级

我有一棵树(带有复选框),如下所示。

A
    A1
        A11
            A111(已选)
            A112(已选)
            A113
        B11
            B111(已选)
            B112

我想过滤它以返回如下,因为A1是所选节点的公共父级

A1
   A11
       A111
       A112
    B11
       B111

树是一个具有根节点及其子节点的层次结构:

public class Node
{
  public int Id;
  public string Name;
  public Node Parent;
  public List<Node> Children;
}
Run Code Online (Sandbox Code Playgroud)

基本上,这是 UI 中的树结构。根据用户选择的内容(复选框),我必须找到公共父级并显示结果树。

c# algorithm

4
推荐指数
1
解决办法
1422
查看次数

如何基于JTokenType简化JToken的铸造

有什么解决方案可以以更好/更短的方式重构以下开关/案例代码?

  • property.Value 是一个 JToken
  • opportunity 是CRM Dynamics实体(类似于字典)

我尝试了以下方法,但未成功(C#不可接受)

Type target = property.Value.Type.GetType();
opportunity[property.Key] = property.Value.Value<target>();
Run Code Online (Sandbox Code Playgroud)

这是我要简化的代码。(JTokenType.Object并且JTokenType.Array以其他方式处理。)

                switch (property.Value.Type)
                {
                    case JTokenType.Boolean:
                        opportunity[property.Key] = property.Value.Value<bool>();
                        break;
                    case JTokenType.Date:
                        opportunity[property.Key] = property.Value.Value<DateTime>();
                        break;
                    case JTokenType.Integer:
                        opportunity[property.Key] = property.Value.Value<int>();
                        break;
                    case JTokenType.String:
                        opportunity[property.Key] = property.Value.Value<string>();
                        break;
                    case JTokenType.Guid:
                        opportunity[property.Key] = property.Value.Value<Guid>();
                        break;
                }
Run Code Online (Sandbox Code Playgroud)

我也尝试过@diiN_的建议:

opportunity[property.Key] = property.Value.Value<dynamic>();
Run Code Online (Sandbox Code Playgroud)

但它抛出InvalidDataContractException: 视觉工作室例外

c# json.net

4
推荐指数
1
解决办法
3301
查看次数

将JSON对象反序列化为.NET HashSet

以下是原始JSON数据的示例:

{ "Standards": { "1": "1" } }
Run Code Online (Sandbox Code Playgroud)

我想将数据反序列化为:

public class Model
{
    public HashSet<String> Standards { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Standards字段实际上具有该Dictionary<String, String>类型.不知何故,键和值总是相等的.由于类型不兼容,我正在寻找一种方法来执行此字段的自定义反序列化.

基于JSON.NET库的解决方案是首选.

PS:我无法控制数据序列化过程.

.net c# serialization json json.net

4
推荐指数
1
解决办法
4150
查看次数

Linq-To-JSON查询以在分层JSON结构中查找特定属性的兄弟节点

给出以下JSON:

{
  "Data": {
    "SPECIAL": "QQ01",
    "AA": "QQ",
    "BB": "QQ",
    "Data": [
      {
        "SPECIAL": "QQ02",
        "AA": "QQ",
        "BB": "QQ",
        "CC": "QQ",
        "Data": [
          {
            "SPECIAL": "QQ03",
            "AA": "QQ",
            "CC": "QQ",
            "Data": [
              {
                "SPECIAL": "QQ04",
                "AA": "QQ",
                "CC": "QQ",
                "Data": [
                  {
                    "SPECIAL": "QQ05",
                    "AA": "QQ",
                    "CC": "QQ",
                    "Data": [
                      {
                        "SPECIAL": "QQ06",
                        "AA": "QQ",
                        "CC": "QQ"
                      }
                    ]
                  },
                  {
                    "SPECIAL": "QQ07",
                    "AA": "QQ",
                    "CC": "QQ",
                    "DD": "QQ",
                    "Data": [
                      {
                        "SPECIAL": "QQ08",
                        "AA": "QQ",
                        "CC": "QQ",
                        "Data": [ …
Run Code Online (Sandbox Code Playgroud)

c# linq json json.net

4
推荐指数
1
解决办法
566
查看次数

将 JSON 驼峰案例转换为蛇案例(反之亦然)并字符串化数值

我必须向 Web REST 服务发送和接收 JSON 对象。这些对象由一个 DLL 生成,该 DLL 将大写字母(“PropertyName”)中的属性名称序列化,并且 Web 服务需要蛇形大小写(“property_name”)。另外,DLL 将数值序列化为浮点数,但 REST API 需要所有字符串。处理对象后,REST 服务返回蛇形大小写 JSON。

JSON 很复杂并且包含嵌套的数组和对象。在从 REST 字符串转换回来时,我可以跳过数字字符串的去字符串化,但我仍然必须将属性名称重新转换为大写字母。

我正在考虑使用 Newtonsoft Json 库编写一个辅助类,但它看起来比我预期的要棘手。转换器应接受 JSON 并返回 JSON。

例子:

{
    "FirstObject": {
        "NestedObject": {
            "AttributeString": "ok",
            "AttributeNumeric": 123.45
        },
        "OtherObject": [{
            "ArrayVal": 100
        }, {
            "ArrayVal": 200
        }]
    }
}
Run Code Online (Sandbox Code Playgroud)

应该成为

{
    "first_object": {
        "nested_object": {
            "attribute_string": "ok",
            "attribute_numeric": "123.45"
        },
        "other_object": [{
            "array_val": "100"
        }, {
            "array_val": "200"
        }]
    }
}
Run Code Online (Sandbox Code Playgroud)

我看到 Json.Net 库有SnakeCaseNamingStrategyCamelCaseNamingStrategy类,所以想法是使用 …

c# json camelcasing json.net

4
推荐指数
1
解决办法
7266
查看次数

使用 JsonConverterAttribute 时自定义继承 JsonConverter 失败

我正在尝试反序列化派生类型,并且我想使用自定义属性Type来区分派生类型。

[
  {
    "Type": "a",
    "Height": 100
  },
  {
    "Type": "b",
    "Name": "Joe"
  }
]
Run Code Online (Sandbox Code Playgroud)

我找到的解决方案是创建一个自定义JsonConverter. 在ReadJson我读取Type属性并通过ToObject<T>函数实例化该类型时。一切正常,直到我使用JsonConverterAttribute. 该ReadJson方法无限循环,因为该属性也应用于子类型。

如何防止将此属性应用于子类型?

[JsonConverter(typeof(TypeSerializer))]
public abstract class Base
{
    private readonly string type;

    public Base(string type)
    {
        this.type = type;
    }

    public string Type { get { return type; } }
}

public class AType : Base
{
    private readonly int height;

    public AType(int height)
        : base("a")
    {
        this.height = …
Run Code Online (Sandbox Code Playgroud)

c# json.net

3
推荐指数
1
解决办法
4558
查看次数