Ik probeer een WebService aan te spreken met als parameter een XML string. Een deel uit die xml:
Attributen 'resource' en 'guid' zijn optioneel. Deze wil ik dus 9 van 10 keer niet mee sturen.
De DefaultValue attribute zorgt er voor dat de property niet wordt geserialized als de field '_xxxx' gelijk is aan de waarde die gepassed is aan DefaultValue. In het geval van de resource gaat dit goed. Echter voor de guid krijg ik het niet voor elkaar.
Ik heb ook geprobeerd om:
maar dit resulteert in "An attribute argument must be a constant expression, typeof expression or array creation expression". Helaas heeft DefaultValue ook geen Guid overload dus simpelweg [DefaultValue(Guid.Empty)] compiled niet. De code in het voorbeeld zorgt er voor dat de guid alsnog in de XML terecht komt.
Kan ik dit nog op een andere manier oplossen?
XML:
1
2
3
4
| <tasks> <task id="10" resource="1" exclusive="true" duration="120" guid="0446636b-e212-47a4-9843-4b4d42368604" /> .... </tasks> |
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| .... public class Task { private bool _isExclusive = true; private int _resourceID = -1; private Guid _guid = Guid.Empty; ... [XmlAttribute(AttributeName="exclusive")] public bool IsExclusive { get { return _isExclusive; } set { _isExclusive = value; } } .... [XmlAttribute(AttributeName = "resource")] [DefaultValue(-1)] public int ResourceID { get { return _resourceID; } set { _resourceID = value; } } [XmlAttribute(AttributeName = "guid")] [DefaultValue(typeof(Guid), "00000000-0000-0000-0000-000000000000")] public Guid TaskGuid { get { return _guid; } set { _guid = value; } } } |
Attributen 'resource' en 'guid' zijn optioneel. Deze wil ik dus 9 van 10 keer niet mee sturen.
De DefaultValue attribute zorgt er voor dat de property niet wordt geserialized als de field '_xxxx' gelijk is aan de waarde die gepassed is aan DefaultValue. In het geval van de resource gaat dit goed. Echter voor de guid krijg ik het niet voor elkaar.
Ik heb ook geprobeerd om:
C#:
1
| [DefaultValue(typeof(Guid), Guid.Empty.ToString())]; |
maar dit resulteert in "An attribute argument must be a constant expression, typeof expression or array creation expression". Helaas heeft DefaultValue ook geen Guid overload dus simpelweg [DefaultValue(Guid.Empty)] compiled niet. De code in het voorbeeld zorgt er voor dat de guid alsnog in de XML terecht komt.
Kan ik dit nog op een andere manier oplossen?