我正在运行一个wcf服务而且我正在调用这个方法
public static Estimate Pro_GetEstimate(int estimateID)
{
try
{
return GetDeserializedData<Estimate>("ESTIMATE", "<ESTIMATE><ID>0</ID><NAME>Estimate for stuff</NAME><DESCRIPTION>This estimate if for stuff</DESCRIPTION><ESTIMATETYPE>TOPDOWN</ESTIMATETYPE></ESTIMATE>");
}
catch (Exception ex)
{
throw new Exception(ex.Message, ex.InnerException);
}
}
这是我发送的XML。它只是用于测试,它应该来自存储过程。
<ESTIMATE><ID>0</ID><NAME>Estimate for stuff</NAME><DESCRIPTION>This estimate if for stuff</DESCRIPTION><ESTIMATETYPE>TOPDOWN</ESTIMATETYPE></ESTIMATE>
这是我将其反序列化为
的类[DataContract]
public class Estimate
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string NAME { get; set; }
[DataMember]
public string DESCRIPTION { get; set; }
[DataMember]
public ESTIMATETYPE ESTIMATETYPE { get; set; }
}
我将XML反序列化就好了。我用这个方法
private static T GetDeserializedData<T>(string roottAttribute, string xmlToDeserialize) where T : new()
{
T deserializedData;
XmlSerializer eetXmlSerializer = new XmlSerializer(typeof(T), new XmlRootAttribute(roottAttribute));
using (StringReader stringReader = new StringReader(xmlToDeserialize))
using (XmlReader reader = XmlReader.Create(stringReader))
{
deserializedData = (T)eetXmlSerializer.Deserialize(reader);
}
return deserializedData;
}
一切正常,直到它返回到前端。然后我得到了标题中提到的错误。
我在其他地方读到这可能是枚举问题。
我确实有这个枚举
[DataContract]
public enum ESTIMATETYPE
{
[EnumMember]
TOPDOWN,
[EnumMember]
BOTTOMUP
}
但有趣的是,如果我发送带有ESTIMATETYPE的XML为空,那就可以了。
<ESTIMATE><ID>0</ID><NAME>Estimate for stuff</NAME><DESCRIPTION>This estimate if for stuff</DESCRIPTION><ESTIMATETYPE></ESTIMATETYPE></ESTIMATE>
我用其他XML调用GetDeserializedData方法,它工作正常。我只是在这种情况下得到这个错误。
任何想法??