C# 序列化。服务。

C# 序列化。服务。,c#,.net,wcf-ria-services,silverlight-5.0,C#,.net,Wcf Ria Services,Silverlight 5.0,我在ria服务中使用了三个类: 首先是响应类: [DataContract] public class ValidationResponseContainer { [DataMember] public string EntityId { get; set; } [DataMember] public bool IsWarning { get; set; } [DataMember] public string ConstraintName {

我在ria服务中使用了三个类:

首先是响应类:

[DataContract]
public class ValidationResponseContainer
{
    [DataMember]
    public string EntityId { get; set; }

    [DataMember]
    public bool IsWarning { get; set; }

    [DataMember]
    public string ConstraintName { get; set; }

    [DataMember]
    public IEnumerable<string> Fields { get; set; }
}
第三是请求:

[DataContract]
[KnownType(typeof(FieldValueContainer))]
public class ValidationRequestContainer
{
    [DataMember]
    public string EntityId { get; set; }

    [DataMember]
    public string TableName { get; set; }

    [DataMember]
    public IEnumerable<FieldValueContainer> FieldValues { get; set; }

    public ValidationRequestContainer()
    {
        FieldValues = new List<FieldValueContainer>();
    }
}

我的datacontract类有什么问题

如何填写字段值?看起来它在序列化之前被重新分配了LINQ查询结果(将FieldValue集标记为“private”将在某种程度上强制FieldValue实际上是一个列表),我会检查代码的所有部分,并确保FieldValue是Listok,顺便说一句,您缺少FieldValues上的AssociationAttribute以及FieldValueContainer上相应的reference和Fk字段。WCF Ria关联始终作为单独的实体发送到连线
[DataContract]
[KnownType(typeof(FieldValueContainer))]
public class ValidationRequestContainer
{
    [DataMember]
    public string EntityId { get; set; }

    [DataMember]
    public string TableName { get; set; }

    [DataMember]
    public IEnumerable<FieldValueContainer> FieldValues { get; set; }

    public ValidationRequestContainer()
    {
        FieldValues = new List<FieldValueContainer>();
    }
}
Exception System.Runtime.Serialization.InvalidDataContractException Type 'System.Linq.Enumerable+WhereSelectEnumerableIterator`2[_2020vision.Infrastructure.FieldValueContainer,System.String]' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute.  If the type is a collection, consider marking it with the CollectionDataContractAttribute.  See the Microsoft .NET Framework documentation for other supported types.
   at System.Runtime.Serialization.DataContract.DataContractCriticalHelper.ThrowInvalidDataContractException(String message, Type type)