Сериализация XML с F#

Я - общий F# n00b, таким образом, я надеюсь, что даю Вам достаточно информации. Я создал класс, названный записью. Я создаю несколько экземпляров этого класса с данными из нашей базы данных. Я затем добавляю каждую запись на список записей. я хочу сделать xml документ с теми записями.

//this is the record data type i created. I also created a sender and recipient data
//type but those are probably not neccessary to understand the issue
type record(id:int, sender:sender, ?recipients: recipient list ) =  
    let mutable id: int = id
    let mutable typ = "Message"
    let mutable creation = creation()
    let mutable sender  = sender
    let mutable recipients = recipients

    [<XmlIgnore()>] 
    [<XmlArrayAttribute("recipients")>]
    [<XmlArrayItem(typeof<recipient>, ElementName = "recipient")>]
    member this.Recipients with get() = recipients and set v = recipients <- v

    public new() =
        record(12180, sender(12180,"Joe","Plumber","Joe@plumber.com"), list.Empty)

    [<XmlElement("id")>] 
    member this.Id with get() = id and set v = id <- v

    [<XmlElement("creation")>] 
    member this.Creation with get() = creation and set v = creation <- v

    [<XmlElement("sender")>] 
    member this.Sender with get() = sender and set v = sender <- v

//i later call this:
 let xmlSerializer = XmlSerializer(typeof<record list>)

Я затем получаю это сообщение об ошибке во времени выполнения:

Была ошибка при отражении типа 'Microsoft. Фа-диез. Наборы. FSharpList '1 [XXXX.Compliance. YYYYY.record]'.//x's и y's, используемый для защиты невинного.

5
задан Brian Rasmussen 4 June 2011 в 18:30
поделиться

1 ответ

Предупреждение: я не уверен.

Я думаю, что некоторые типы F # (например, «список») не допускают сериализацию с помощью XmlSerializer (например, для этой технологии сериализации требуются типы с установщиками полей или общедоступными конструкторами по умолчанию или что-то в этом роде). Я думаю, что некоторые варианты, которые могут немедленно разблокировать вас, включают

  • изменение использования списков F # на использование массивов .NET ( список записей -> запись [] и т. Д.)
  • ( возможно) используйте DataContractSerializer вместо XmlSerializer , поскольку DCS не требует так много от типа (я забываю, работает ли он со списками F # или нет)
  • , возможно, что-то еще Я забыл

. Надеюсь, кто-то другой, более хорошо знакомый с технологиями сериализации .NET, сможет дать более окончательный ответ.

4
ответ дан 15 December 2019 в 00:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: