Xml格式错误
问题描述:
我在C#webservice项目中遇到了可空属性问题。Xml格式错误
public class Header
{
[DataMember]
public long Id { get; set; }
[DataMember]
public long SportId { get; set; }
[DataMember]
public long TournamentId { get; set; }
[DataMember]
public string TournamentName { get; set; }
[DataMember]
public string TournamentShortName { get; set; }
[DataMember]
public long StatusId { get; set; }
[DataMember]
public string StatusName { get; set; }
[DataMember]
public string StatusShortName { get; set; }
[DataMember]
public DateTime MatchDate { get; set; }
[DataMember]
public string MatchTime { get; set; }
[DataMember]
public DateTime? PeriodStartDate { get; set; }
[DataMember]
public int? Quarter1HomeTeamScore { get; set; }
[DataMember]
public int? Quarter1AwayTeamScore { get; set; }
[DataMember]
public int Quarter2HomeTeamScore { get; set; }
[DataMember]
public int Quarter2AwayTeamScore { get; set; }
[DataMember]
public int Quarter3HomeTeamScore { get; set; }
[DataMember]
public int Quarter3AwayTeamScore { get; set; }
[DataMember]
public int Quarter4HomeTeamScore { get; set; }
[DataMember]
public int Quarter4AwayTeamScore { get; set; }
}
这是序列化后的SOAP XML:
<LiveMatchList>
<Items>
<ListMatch>
<Header>
<Quarter1HomeTeamScore xsi:nil="true"/>
<Quarter1AwayTeamScore xsi:nil="true"/>
<Quarter2HomeTeamScore xsi:nil="true"/>
<Quarter2AwayTeamScore xsi:nil="true"/>
<Quarter3HomeTeamScore xsi:nil="true"/>
<Quarter3AwayTeamScore xsi:nil="true"/>
<Quarter4HomeTeamScore xsi:nil="true"/>
<Quarter4AwayTeamScore xsi:nil="true"/>
<Id>138906</Id>
<SportId>2</SportId>
<TournamentId>8</TournamentId>
<TournamentName> Eurocup</TournamentName>
<TournamentShortName> AVK</TournamentShortName>
<StatusId>12</StatusId>
<StatusName> 1. Periyot</StatusName>
<StatusShortName> 1.P</StatusShortName>
<MatchDate>2013-03-20T00:00:00</MatchDate>
<MatchTime> 21:30</MatchTime>
<PeriodStartDate xsi:nil="true"/>
</Header>
</ListMatch>
我试图在http://www.xmlgrid.net/查看XML,但无法查看因为xsi:nil = "true"
节点吧。而在另一个使用这个webservice的项目中,我在将对象反序列化的同时出错了xml格式错误。
如何忽略空属性?还是有另一种解决这个问题的方法?
我想:
[DataMember(EmitDefaultValue = false)]
public int? Quarter1HomeTeamScore { get; set; }
和
[DataMember(EmitDefaultValue = false)]
public int Quarter1HomeTeamScore = 0
答
添加EmitDefaultValue属性是这样的:
[DataMember(EmitDefaultValue = false)]
UPDATE
尝试IsRequired属性像
[DataMember(IsRequired = false)]
而当你评论它不为你工作,检查了这一点的
How to remove null DataMember properties from the response in wcf
+0
EmitDeafultValue不适合我吗? – 2013-03-21 13:16:46
可能重复[序列化对象到XML时,不同的代表Null值] (http://*.com/questions/11362313/representing-null-values-differently-when-serializing-objects-to-xml) – JMK 2013-03-21 13:47:01