2015-09-24 3 views
0

Ниже приведен тестовый код, используемый для получения ns1: issue, я всегда получаю объект, в котором ничего нет.ns1: проблема десериализации C#

если удаляю два [XmlType] и [XmlRoot] ошибки.

Я уверен, что кто-то должен был уже сталкивался с проблемой не получают право термин для поиска, вероятно,

надежда полностью его простая вещь.

[XmlType(AnonymousType = true, Namespace = "http://itaintworking.com/test/")] 
[XmlRoot(Namespace = "http://itaintworking.com/test/", IsNullable = false)] 
public class Clients 
{ 
    public string clientName { get; set; } 
    public addressDetails addressDetails { get; set; } 
} 

public class addressDetails 
{ 
    public int addressId { get; set; } 
} 

[Test(Description = "Serialization Exception")] 
public void CheckDeserializer() 
{ 
    var strXml = 
     "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><ns1:Clients xmlns:ns1=\"http://itaintworking.com/test/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ><clientName>hello</clientName><addressDetails><addressId>98989</addressId></addressDetails></ns1:Clients>"; 
    var x = XmlSerializer<Clients>.Deserialize(strXml); 
    Assert.IsNotNull(x); 
} 

Я использую код, который использует дженерики, существует другой способ недобросовестный кодировке UTF8, и нуль для xmlReaderSetting.

/// <summary> 
/// Deserializes a XML string into an object 
/// </summary> 
/// <param name="xml">The XML string to deserialize</param> 
/// <param name="encoding">The encoding</param> 
/// <param name="settings">XML serialization settings. <see cref="System.Xml.XmlReaderSettings"/></param> 
/// <returns>An object of type <c>T</c></returns> 
public static T Deserialize(string xml, Encoding encoding, XmlReaderSettings settings) 
{ 
    if (string.IsNullOrEmpty(xml)) 
     throw new ArgumentException("XML cannot be null or empty", "xml"); 

    var xmlSerializer = new XmlSerializer(typeof(T)); 
    using (var memoryStream = new MemoryStream(encoding.GetBytes(xml))) 
    { 
     using (var xmlReader = XmlReader.Create(memoryStream, settings)) 
     { 
      return (T)xmlSerializer.Deserialize(xmlReader); 
     } 
    } 
} 

ответ

0

Непонятно, как именно вы хотите, чтобы это было исправлено.

Как в настоящее время находится в XML, элементы clientName и addressDetails в пределах элемента Clients не находятся в одном и том же пространстве имен. Таким образом, один исправление:

[XmlType(AnonymousType = true, Namespace = "http://itaintworking.com/test/")] 
[XmlRoot(Namespace = "http://itaintworking.com/test/", IsNullable = false)] 
public class Clients 
{ 
    [XmlElement(Namespace="")] 
    public string clientName { get; set; } 
    [XmlElement(Namespace = "")] 
    public addressDetails addressDetails { get; set; } 
} 

Другой исправление может быть, чтобы изменить пространство имен в XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<ns1:Clients xmlns:ns1="http://itaintworking.com/test/" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <ns1:clientName>hello</ns1:clientName> 
    <ns1:addressDetails> 
     <ns1:addressId>98989</ns1:addressId> 
    </ns1:addressDetails> 
</ns1:Clients> 
+0

Вы удивительный, Дэмиен, все, что мне нужно было XmlElement (Namespace = «»), который решает проблема – bhushanvinay

Смежные вопросы