Перечисление C # свойство null против 0 - PullRequest
2 голосов
/ 17 января 2009

Я использую IIS / asmx для поддержки Flash-клиента. Некоторые из моих объектов передачи данных уровня обслуживания имеют свойства, которые являются значениями перечисления. Есть случаи, когда эти свойства должны быть нулевыми.

Когда объект с нулевым значением для такого свойства перечисления отображается в soap, я получаю эту ошибку:

System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: Instance validation error: '0' is not a valid value for NameSpaceX.Model.NodeType.
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_NodeType(NodeType v)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write4_PackageDTO(String n, String ns, PackageDTO o, Boolean isNullable, Boolean needType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write15_ArrayOfPackageDTO(Object o)
   at Microsoft.Xml.Serialization.GeneratedAssembly.ListOfPackageDTOSerializer1.Serialize(Object objectToSerialize, XmlSerializationWriter writer)
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
   at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o, XmlSerializerNamespaces namespaces)
   at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o)
   at System.Web.Services.Protocols.XmlReturnWriter.Write(HttpResponse response, Stream outputStream, Object returnValue)
   at System.Web.Services.Protocols.HttpServerProtocol.WriteReturns(Object[] returnValues, Stream outputStream)
   at System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues)
   at System.Web.Services.Protocols.WebServiceHandler.Invoke()

Есть ли лучшее решение, чем создание элемента перечисления со значением 0 (например, [0, "null"]? Я подозреваю, что мне здесь не хватает базовых знаний.

Спасибо.

1 Ответ

4 голосов
/ 17 января 2009

Моим первым стремлением было указать вам на тип Nullable<T>. Однако после просмотра документации по Nullable<T> и SOAP выясняется, что она не поддерживается Возможно, вы захотите изучить это дальше.

Тем не менее, Enums часто объявляет NotSet = 0 член.

...