2013-02-12 4 views
3

У меня есть этот классДобавление атрибутов при сериализации в XML

public class Audit 
{ 
    public string name { get; set;} 
    public DateTime AuditDate { get; set;} 

    public long? DepartmentId {get; set;} 
    public string Department { get; set;} 

    public long? StateId { get; set;} 
    public string? State { get; set; } 

    public long? CountryId { get; set; } 
    public string Country { get; set; } 
} 

Когда я сериализации это выглядит

<Audit> 
    <name>George</name> 
    <AuditDate>01/23/2013</AuditDate> 
    <DepartmentId>10</DepartmentId> 
    <Department>Lost and Found</Department> 
    <StateId>15</StateId> 
    <State>New Mexico</StateId> 
    <CountryId>34</CountryId> 
    <Country>USA</Country> 
</Audit> 

Я добавил этот класс, чтобы попытаться получить поля идентификаторов в качестве атрибута

public class ValueWithId 
{ 
    [XmlAttribute ("id")] 
    public long? Id { get; set; } 

    [XmlText] // Also tried with [XmlElement] 
    public string Description { get; set; } 
} 

Переделал мой класс к этому

[Serializable] 
public class Audit 
{ 
    public string name { get; set;} 
    public DateTime AuditDate { get; set;} 

    public ValueWithId Department { get; set;} 
    public ValueWithId State { get; set; } 
    public ValueWithId Country { get; set; } 
} 

Но я получаю ошибку «Был ошибка отражает тип Аудит»

Я пытаюсь получить следующее как XML

<Audit> 
    <name>George</name> 
    <AuditDate>01/23/2013</AuditDate> 
    <Department id=10>Lost and Found</Department> 
    <State id=15>New Mexico</State> 
    <Country id=34>USA</Country> 
</Audit> 

Благодарности

ответ

1

Добавить Serializable атрибут класса ValueWithId

[Serializable] 
public class ValueWithId 
{ 
    [XmlAttribute ("id")] 
    public long Id { get; set; } 

    [XmlText] 
    public string Description { get; set; } 
} 

и если y Вы посмотрите на свое исключение, вы найдете его довольно красноречивым:

«Невозможно выполнить сериализацию элемента« Идентификатор »типа System.Nullable`1 [System.Int64]. XmlAttribute/XmlText не может быть использован для кодирования сложных типов "}

, если вам нужно сериализовать обнуляемую смотрите здесь:. Serialize a nullable int

+0

Я до сих пор получаю сообщение об ошибке «Была ошибка, отражающая тип Audit» – plh

+0

@plh удалил ли вы nullable ??? – giammin

+0

Спасибо. Именно так, мой идентификатор был недействительным. – plh

0

Я согласен с ответом giammin, и это работает Если вы хотите. оставить Nullable ID, то я хотел бы предложить только удаление атрибута Id выше Вы получаете выходной simiar к этому ":.

<Audit xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <name>George</name> 
    <AuditDate>2013-01-23T00:00:00</AuditDate> 
    <Department> 
    <Id>10</Id>Lost and Found</Department> 
    <State> 
    <Id>15</Id>New Mexico</State> 
    <Country> 
    <Id>34</Id>USA</Country> 
</Audit> 

в противном случае, я не считаю, что это может сериализовать NULLABLE типы

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