Я - общий 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, используемый для защиты невинного.
Предупреждение: я не уверен.
Я думаю, что некоторые типы F # (например, «список») не допускают сериализацию с помощью XmlSerializer (например, для этой технологии сериализации требуются типы с установщиками полей или общедоступными конструкторами по умолчанию или что-то в этом роде). Я думаю, что некоторые варианты, которые могут немедленно разблокировать вас, включают
список записей
-> запись []
и т. Д.) DataContractSerializer
вместо XmlSerializer
, поскольку DCS не требует так много от типа (я забываю, работает ли он со списками F # или нет) . Надеюсь, кто-то другой, более хорошо знакомый с технологиями сериализации .NET, сможет дать более окончательный ответ.