0

我在我的 ASP.NET Web API 项目中使用XmlSerializer而不是,DataContractSerializer并将返回对象定义为

响应对象

public class MyResponse 
{
   public string Name {get;set;}

   public CustomField<string> Username {get;set;}

   public CustomField<float?> Score {get;set;}
}

自定义字段

public class CustomField<T>
{
    public T Value {get;set;}

    public long LastModified {get;set;}

}

我想生成一个 XML 响应

<MyResponse>
 <FirstName>ABC</FirstName>
 <Username lastModified="1234">XYZ</Username>
 <Score lastModified="45678">12002</Score>
</MyResponse>

当我将CustomField类装饰为

public class CustomField<T>
{
    [XmlText]
    public T Value {get;set;}

    [XmlAttribute]
    public long LastModified {get;set;}
}

如何获得所需的 XML 响应?

4

1 回答 1

0

好吧,我想我知道发生了什么事。

如果您尝试运行

new XmlSerializer(typeof(MyResponse))

你会得到这个错误:

System.InvalidOperationException:无法序列化 System.Nullable`1[System.Single] 类型的成员“值”。XmlAttribute/XmlText 不能用于编码复杂类型。

所以问题是你有一个'float'类型的字段?作为 [XmlText]。[XmlText] 只能应用于基元,而且看起来 XmlSerializer 无法识别“浮点数?” 作为原始人。如果你使用 'float' 而不是 'float?',一切看起来都正常。如果您想指示有时没有 Score,您可能希望将 Score 设置为 null 而不是将 Score 的值设置为 null。

希望有帮助。

于 2013-01-14T01:24:12.047 回答