Tôi đang cố gắng viết một ONIX cho công cụ nhập sách trong C#. Tôi bắt đầu bằng cách tạo ra các lớp bằng cách sử dụng Xsd2Code và có một tệp lớn với tất cả các thuộc tính mà sau một vài tinh chỉnh không tạo ra bất kỳ lỗi nào khi deserializing.Deserialize Enum từ Xml sử dụng thuộc tính Value trong C#
Tôi đang cố gắng deserialize toàn bộ phần tử trong một lần, thành một đối tượng lớn trong bộ nhớ và sau đó thực hiện các công cụ với nó (chẳng hạn như lưu nó vào cơ sở dữ liệu).
Cách Xsd2Code tạo ra các lớp, ngoài thực tế là có rất nhiều thuộc tính, có một chút lạ, ít nhất với tôi.
Dưới đây là một trong những lớp học mà phải là một tài sản của đối tượng sản phẩm:
public partial class NotificationType
{
public NotificationTypeRefname refname { get; set; }
public NotificationTypeShortname shortname { get; set; }
public SourceTypeCode sourcetype { get; set; }
public List1 Value { get; set; }
}
tôi muốn hướng sự chú ý của bạn vào dòng này:
public List1 Value { get; set; }
"List1" là một enum , được định nghĩa như vậy:
public enum List1
{
[System.Xml.Serialization.XmlEnum("01")]
Item01,
[System.Xml.Serialization.XmlEnum("02")]
Item02, etc...
Vấn đề của tôi là trong quá trình deserialization, tất cả các trường deserialize correctl y XÁC NHẬN Enums.
Tôi đã thử trang trí các thuộc tính với XmlEnum ("NotificationType") v.v ... không có gì!
Đây là mã deserialization của tôi:
var p = new Product();
XmlSerializer pserializer = new XmlSerializer(p.GetType());
object pDeserialized = pserializer.Deserialize(reader);
p = (Product) pDeserialized;
Đây là cách yếu tố này trông giống như trong XML:
<NotificationType>03</NotificationType>
Thuộc tính đó là trong C# cho đối tượng sản phẩm là:
public NotificationType NotificationType { get; set; }
Nếu tôi thay đổi điều này thành:
public List1 NotificationType { get; set; }
việc deserialization hiển thị chính xác 'Item03', có nghĩa là nó đọc bất cứ điều gì trong XML. Nếu tôi để nó như trên, thuộc tính 'Giá trị' của lớp NotificationType không bao giờ được lấp đầy và luôn hiển thị Item01 (mặc định của Enum).
Tôi đã cạn kiệt tất cả các câu hỏi có thể có về SO và tìm kiếm trên web vì tại sao thuộc tính Giá trị này hoạt động với một số loại (Chuỗi) nhưng không phải là Enums. Tui bỏ lỡ điều gì vậy?
Xin lỗi vì câu hỏi và mã dài. Đánh giá cao bất kỳ ánh sáng ai có thể đổ về vấn đề này. Bị mắc kẹt với nó cả một ngày nay.
Tính năng này hoạt động! Tôi có thể thề tôi đã thử nó trước đây. Tôi nghĩ rằng đây là thuộc tính cho phép thư viện deserialization biết thuộc tính nào cần điền như giá trị của phần tử XML. –
Không hiệu quả với tôi. –
Điên, tôi cũng đang làm việc trên ONIX! Điều tương tự này cũng rất tốt cho tôi, với một giá trị Enum duy nhất. Bất kỳ may mắn với deseralizing một loạt các Enums? Chẳng hạn như List91 []? –