2014-11-05 1 views
1

XML Deserializer에서 선택 사항으로 간주하려는 기존 클래스의 클래스에 일부 속성을 추가하고 있습니다. IsNullable 매개 변수와 Specified 속성을 아무 쓸모없이 추가했습니다.XML 역 직렬화의 선택적 요소

<XmlElement("name")> 
Public Property Name As String 
<XmlElement("car", IsNullable:=True)> 
Public Property Car As String 

<XmlIgnore> 
Public ReadOnly Property CarSpecified As Boolean 
    Get 
     Return Car <> String.Empty 
    End Get 
End Property 

과 같은 XML 보이는 : : 내 코드는 다음과 같습니다라는 메시지와 함께 예외가

<?xml version="1.0" encoding="UTF-8" ?> 
<Class> 
    <name>Test</name> 
</Class> 

"값은 null 일 수 없습니다 매개 변수 이름 :. 값"

+0

한 의견은 내가 사용하는'String.IsNullOrEmpty (자동차)'사용을 선호한다는 것입니다 'Car <> String.Empty'. 같은 결과이지만, null이 예외가되고 String.Empty가 발생하지 않는 곳에서는 좋습니다. – JoelC

+0

일반적으로 String.IsNullOrWhiteSpace 또는 String.IsNUllOrEmpty를 사용하지만 예전처럼이 예제를 꽤 빨리 작성하여 이전 대기 모드로갔습니다. – Lance

답변

0

. 당신이 표시 한 코드를 기반으로, 나는 (이 정확한 값을 오류없이 실행하고 표시) 문제가 표시되지 않습니다 : 내가 가지고있는

Imports System.Xml.Serialization 

Module Module1 

    Sub Main() 

     Dim xd = _ 
     <?xml version="1.0" encoding="UTF-8"?> 
     <Owner> 
      <name>Test</name> 
     </Owner> 

     Dim xds As New XmlSerializer(GetType(Owner)) 
     Using xr As New System.IO.StringReader(xd.ToString()) 
     Dim o = DirectCast(xds.Deserialize(xr), Owner) 
     Console.WriteLine("{0} - {1} - {2}", o.Name, o.Car, o.CarSpecified) 
     End Using 
    End Sub 
End Module 

Public Class Owner 
    <XmlElement("name")> 
    Public Property Name As String 
    <XmlElement("car", IsNullable:=True)> 
    Public Property Car As String 

    <XmlIgnore> 
    Public ReadOnly Property CarSpecified As Boolean 
     Get 
     Return Car <> String.Empty 
     End Get 
    End Property 
End Class 
+0

제가 처음 생각한 것처럼 제 문제는 직렬화가 아니었고 회신을 조사해 보면 빈 값으로 IEnumerable을 검색하려고하는 실제 문제가 발생했습니다. – Lance

0

Public Property Car As String? 시도를 - 물음표는 해당 속성이 nullable인지 확인합니다.

편집 : 다음을 시도해보십시오 당신은 더 많은 코드를 제공해야 할거야

Public ReadOnly Property CarSpecified As Boolean 
Get 
    Return Car isnot nothing 
End GetEnd Property 
+1

문자열은 VB.Net에서 암시 적으로 Nullable입니다. 그러나 샘플 코드가 원본 코드에 충실하지 않고 일부 값 유형이 문자열 대신 사용되는 경우이 코드는 아마도 대답 일 것입니다. – BlueMonkMN

+0

VB.Net에서 문자열을 <> 연산자와 비교해도 오류가 발생하지 않으므로 IsNot Nothing 또는 Not String.IsNullOrEmpty (Car)를 사용하는 것이 좋지만 여기서는 문제가 해결되지 않습니다. . – BlueMonkMN

+0

값 유형이 아니기 때문에 null 입력 가능 (?) 유형을 문자열에 추가 할 수 없습니다. – Lance