2014-09-29 58 views
4

我想对REST API执行JSON get请求。
当我发布一个资源,然后立即使用get,我在我的响应中得到一个JSON对象。
当我发布资源并使用get后,然后JSON对象变成一个数组。
下面是一些例子回应,我得到:Json从array <>对象的GET请求更改

文章后,把:

{ 
    "metadata":{ 
     "entry":[ 
     { 
      "@key":"x", 
      "$":"y" 
     }, 
     { 
      "@key":"x", 
      "$":"y" 
     } 
     ] 
    } 
} 

只文章后:

{ 
"metadata": { 
     "entry": { 
      "@key": "cachingEnabled", 
      "$": "false" 
     } 
    }, 
} 

我可以得到它的两种工作使用的以下任一码。

JSON阵列:

public class MetaData 
{ 
    [JsonProperty("entry")]  
    public List<EntryType> Entry { get; set; } 
} 

JSON对象:

public class MetaData 
{ 
    [JsonProperty("entry")]  
    public EntryType Entry { get; set; } 
} 

我如何在C#地图这一个属性?

+1

将该属性定义为'List ',然后使用JsonConverter检测单个实例并将其放入列表中。请参阅[如何使用JSON.net处理同一个属性的单个项目和数组](http://stackoverflow.com/q/18994685/10263) - 接受的答案有一个已写入的通用转换器,该转换器应该适用于您。 – 2014-09-29 17:15:19

回答

0

你可以把它映射到dynamic类型,它可以让编译器推迟在运行时类型:每次反序列化Entry时间可能不同类型的

public class MetaData 
{ 
    [JsonProperty("entry")]  
    public dynamic Entry { get; set; } 
} 

这样。在反序列化您的JSON之后,您必须跟踪它的类型。