为了绑定到网格,我必须将JSON字符串反序列化为C#类。我用C#实现了相应的类。但在特定实例中,这将失败,因为JSON属性将是一个数组或一个对象。请检查字符串的一部分。
我已经创建了ItemList类,它有3个属性IL1、Name和另一个对象类“Item”。但是,您可以看到,当属性“name”是Rubber时,我应该将Item class列表作为属性而不是Item对象。当它是橡胶时,它返回2个项目的数组。
"ItemList": [
{
"@IL1": "Yes",
"@Name": "Pencil"
"Item": {
"@ItemType": "Pencil",
"@Item2": "1A7716744F7048ACA2549BE93F0A2BF1",
"aimLink": {
"@id": "1A7716744F7048ACA2549BE93F0A2BF1",
"@DisplayText": "P00001"
}
}
},
{
"@IL1": "Yes",
"@Name": "Pen",
"Item": {
"@ItemType": "Pen",
"@Item2": "AE067F7EDB6147C09AED243C1F7FAD25",
"aimLink": {
"@id": "AE067F7EDB6147C09AED243C1F7FAD25",
"@DisplayText": "5100010654120001
}
}
},
{
"@IL1": "Yes",
"@Name": "Rubber",
"Item": [
{
"@ItemType": "Rubber",
"@ItemGID": "622025629037499394DF092DA16BAB7F",
"aimLink": {
"@id": "622025629037499394DF092DA16BAB7F",
"@DisplayText": "12345678-1234-123456-7116#01"
}
},
{
"@ItemType": "Rubber",
"@ItemGID": "F336F65F8E014E80B84A2312F829493C"
"aimLink": {
"@id": "F336F65F8E014E80B84A2312F829493C",
"@DisplayText": "12345678-1234-123456-7116#14"
}
}
]
}
],
我怎样才能有效地将它解析成一个C#类,以及实现这一目标的最简单的方法呢?
谢谢,Divya
您可以自定义JSONConverter
(例如ItemConverter
)并使用[JSONConverter(typeof(ItemConverter))]
属性标记Item
属性
您可以通过自定义JSONConverter
来解决此问题,您可以使用下面的方法将单个值转换为数组,然后使用JSONConverter
属性标记Item
属性
public class SingleValueArrayConverter<T> : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
object retVal = new Object();
if (reader.TokenType == JsonToken.StartObject)
{
T instance = (T)serializer.Deserialize(reader, typeof(T));
retVal = new List<T>() { instance };
}
else if (reader.TokenType == JsonToken.StartArray)
{
retVal = serializer.Deserialize(reader, objectType);
}
return retVal;
}
public override bool CanConvert(Type objectType)
{
return false;
}
}
假设这是ItemList
类
public class ItemList
{
public string @IL1 { get; set; }
public string @Name { get; set; }
[JsonConverter(typeof(SingleValueArrayConverter<Item>))]
public List<Item> Item { get; set; }
}
public class Item
{
public string @ItemType { get; set; }
public string @Item2 { get; set; }
public AimLink aimLink { get; set; }
}
public class AimLink
{
public string @id { get; set; }
public string @DisplayText { get; set; }
}
问题内容: 我有一些具有各种属性的JSON,其中大多数是简单数据类型。但是,我在JSON中有一个属性,当我将其反序列化为C#类时,我只需要将其反序列化为字符串即可。 JSON示例: 除了将是有效的JSON对象外,“ json”对象没有任何设置结构。 因此,在上面的示例中,“ json”的值是一个JSON对象-但是当它反序列化时,我需要将它作为字符串。 因此,如果我的C#类是: 然后,如果我使用:
问题内容: 可以说我有以下格式的JSON: 我试图避免自定义反序列化器,并尝试将上述JSON(称为Wrapper.java)反序列化为Java POJO。“类型”字段指示“对象”反序列化,即。type = foo表示使用Foo.java反序列化“ object”字段。(如果type = Bar,则使用Bar.java反序列化对象字段)。元数据/所有者将始终使用相同的反序列化方式,每个方法都使用一个
问题内容: 我在反序列化一些json数据,获取InvalidCastExceptions之类的问题。 谁能指出我正确的方向? 这是我要反序列化的json; [{“ OrderId”:0,“名称”:“摘要”,“ MaxLen”:“ 200”},{“ OrderId”:1,“名称”:“详细信息”,“ MaxLen”:“ 0”}] 这是我的代码; 问题答案: OrderId是json中的一个Int(请注
我需要反序列化以下json: 将它的< code>id属性设置为< code>foo_id json属性。 我需要在自定义反序列化程序中执行此操作。实现这一点最简单的方法是什么? 我想以某种方式将json“转换”为 然后将此委托给杰克逊。 在本例中,对象的类型为Foo,但其他对象可能不属于此类。另外,在本例中,json是一个数字,但如果它也是一个字符串,我希望支持。所以,我需要一种通用的方法来做到
问题内容: 我有这个字符串: 我正在反序列化对象: 该对象看起来像: 并尝试创建字典: 但得到。 可能是什么问题? 问题答案: 请参阅mridula的答案,了解为什么您会得到null。但是,如果您想直接将json字符串转换为字典,则可以尝试以下代码段。
问题内容: 我有以下字符串 我想反序列化一个类的对象 我正在使用python 2.6和2.7 问题答案: