我正在为我们的服务编写一个新的DataContract(该服务位于Windows服务中并由iis公开)。在主类中,我有一个Arraylist成员,当我公开该对象时,我得到System.Runtime.Serialization.InvalidDataContractException如果将成员更改为“ List <>”,那么一切就很好了(它通过postman-> iis-> windows完成服务)。
课程是:
namespace Kitchen
{
[Serializable()]
[DataContract]
[KnownType(typeof(Fruit))]
[XmlInclude(typeof(Fruit))]
public class Foods
{
private ArrayList uniFood;
private List<string> lstCity;
[DataMember]
[XmlElement(typeof(Fruit))]
public ArrayList FoodArr
{
get
{
return uniFood;
}
set
{
uniFood = value;
}
}
[DataMember]
[XmlIgnore]
public List<string> CityGrown
{
get
{
return lstCity;
}
set
{
lstCity = value;
}
}
[DataMember]
[XmlIgnore]
public bool IsMerge
{
get;
set;
}
[DataMember]
[XmlIgnore]
public bool IsRipe
{
get;
set;
}
public Foods()
{
uniFood = new ArrayList();
lstCity = new List<string>();
}
}
}
尝试将类发送到服务引用时遇到的错误: System.Runtime.Serialization.InvalidDataContractException:类型'Newtonsoft.Json.Linq.JToken'是不支持的递归集合数据协定。考虑修改集合“ Newtonsoft.Json.Linq.JToken”的定义以删除对其自身的引用。
任何帮助将不胜感激
这是api中的一项新功能,适用于vs2013。在过去,我曾尝试将arraylist更改为List <>,这很有帮助,但我需要将它作为数组列表,因为当序列化为xml时,它显示为:
答案 0 :(得分:0)
当Data Contract类具有集合成员时,请使用[CollectionDataContract(...)]属性而不是[DataContract]属性,请参阅以下文档。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/collection-types-in-data-contracts
https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.collectiondatacontractattribute?redirectedfrom=MSDN&view=netframework-4.8