2015-01-12 4 views
0

Я хотел бы десериализовать json для объекта. Джсон подобен ниже. Но одно значение свойства, может быть, строка или массив, кто-нибудь знает, как с этим справиться?Преобразование свойства Json на основе значения свойства

{ 
    "name": "123", //Name 
    "properties": [ 
    { 
     "propertyId": "Subject", // property id 
     "value": [ 
     { 
      "entityId": "math", //entity id 
      "entityTypeId": "MATH" //entity type id 
     } 
     ] 
    }, 
    { 
     "propertyId": "Description", 
     "value": "Hello World." 
    } 
    ] 
} 

Класс, как показано ниже.

//The object 
public class Content 
{ 
public Content() 
{ 
//Properties is List. 
Properties = new List<Property>(); 
} 

[JsonProperty(PropertyName = "name")] 
public string Name { get; set; } 

[JsonProperty(PropertyName = "properties")] 
public List<Property> Properties { get; set; } 
} 

public class Property 
{ 
public Property() 
{ 
Value = new List<Value>(); 
} 

[JsonProperty(PropertyName = "propertyId")] 
public string PropertyDefId { get; set; } 

//Actually this property value can also be string, that's the problem. 
[JsonProperty(PropertyName = "value")] 
public List<Value> Value { get; set; } 
} 

//Value object 
public class Value 
{ 
//Have to write comments. 
[JsonProperty(PropertyName = "entityId")] 
public string EntityId { get; set; } 

//Have to write comments. 
[JsonProperty(PropertyName = "entityTypeId")] 
public string EntityTypeId { get; set; } 
} 
+0

Как просто объявить 'Value' как' object'? – Lloyd

+0

У меня нет времени на проверку прямо сейчас, но, вероятно, вы можете использовать тип: 'JObject' – Uriil

+0

@Lloyd Это работает, но я хотел бы преобразовать его как определенный тип здесь (значение). Таким образом, цель состоит в том, что если значение в Json равно «123», тогда преобразуйте его как строку, если значение представляет собой массив в Json, затем преобразуйте его как тип значения. – Damon

ответ

0

Я сделал это в Java с Gson liblary и это было как

JsonObject field = parser.parse(json).getElementAsJSONObject(); 
if (field.isPrimitive()) { 
    String text = field.asString(); 
} else if (field.isArray()) { 
    JSONArray array = field.asArray(); 
} 

Я написал этот код из моей памяти, так что не 100% надежной. Я не знаю никаких решений для C#.

-1

$ .parseJSON преобразует вашу строку в правильный объект, даже если тип свойства отличается для двух разных свойств.

http://jsfiddle.net/mdanielc/e0acsyp1/2/

var jsonString = '{"name": "123","properties": [{"propertyId": "Subject","value": [{"entityId":"math","entityTypeId": "MATH" }]},{"propertyId": "Description","value": "Hello World."}]}'; 
var jsonobj = $.parseJSON(jsonString); 

alert(jsonobj.properties[0].value[0].entityId); 
alert(jsonobj.properties[1].value); 

});

+0

C# не Javascript. – Lloyd