在Windows Phone应用程序中,我需要解析JSON数据.我能够获得未嵌套的键的值.但是如果JSON在数组中有数组,那么如何从JSON文件中提取值呢?
在过去,我所做的是将JSON解析为JArray对象,然后从JToken获得指定字符串键的值.
在下面的JSON中,people有men和women,并且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) 我有一个包含项目列表的类。当我序列化该类时,我希望项目索引值出现在 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) 我正在尝试序列化一个由许多继承自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) 如何在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主体中的列元数据.
我有一棵树(带有复选框),如下所示。
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 中的树结构。根据用户选择的内容(复选框),我必须找到公共父级并显示结果树。
有什么解决方案可以以更好/更短的方式重构以下开关/案例代码?
property.Value 是一个 JTokenopportunity 是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)
以下是原始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:我无法控制数据序列化过程.
给出以下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) 我必须向 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 库有SnakeCaseNamingStrategy和CamelCaseNamingStrategy类,所以想法是使用 …
我正在尝试反序列化派生类型,并且我想使用自定义属性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)