Tôi đang sử dụng XmlSerializer
. Lớp học của tôi:XmlSerializer: tuần tự hóa thuộc tính lớp dưới dạng thuộc tính của một subelement tùy chỉnh
[Serializable]
[XmlRoot(ElementName="MyClass")]
public class MyClass
{
public string Value;
}
Tôi muốn serialize nó để Value
kết thúc như là một thuộc tính của một subelement tên (ví dụ) "Văn bản".
kết quả mong muốn:
<MyClass>
<Text Value="3"/>
</MyClass>
Nhưng KHÔNG (đó sẽ là ảnh hưởng của giá trị gia tăng đánh dấu như một XmlAttribute
)
<MyClass Value="3">
</MyClass>
Và KHÔNG (mà sẽ là hiệu quả đánh dấu Giá trị là XmlElement
):
<MyClass>
<Value>3</Value>
</MyClass>
Làm cách nào để đạt được điều này?
Tôi biết rằng tôi có thể thay đổi loại Value
từ chuỗi thành một lớp tùy chỉnh tuần tự khác.
Thật không may, tôi có nhiều thuộc tính như vậy, vì vậy tôi cần tạo hàng tá lớp học nhỏ.
Có giải pháp nào nhanh hơn không?
EDIT:
Đáp lại ý kiến của bạn:
Không, không phải mọi tài sản phải được đăng một subelement tên "Text". Tên của danh sách con là duy nhất và không rõ ràng.
Mẫu đầu ra XML:
<visibility> <site visible="yes"/> <comparator visible="no"/> <expiration days="7"/> <comment>blahblahblah</comment> <visibility>
mẫu lớp:
!
[XmlRoot(ElementName="Visibility")]
public class Visibility
{
[XPath("/[email protected]")] // if only this was possible!
public string OnSite
{
get { return SiteVisible ? "yes" : "no"; }
}
[XPath("/[email protected]")] // as above...
public string InComparator
{
get { return ComparatorVisible ? "yes" : "no"; }
}
[XmlIgnore]
public bool SiteVisible;
[XmlIgnore]
public bool ComparatorVisible;
[XPath("/[email protected]")] // as above...
public int ExpiresAfterDays;
[XmlElement("comment")] // this is easy
public string Comment;
}
Bạn có thể cung cấp đầy đủ cấu trúc XML mong muốn (3-5 phần tử/thuộc tính) với lớp thích hợp không? –
Tôi đã có một giải pháp cho điều này - nhưng không phải nếu mọi tài sản cần phải tuần tự hóa thành một phần tử có tên là "Văn bản" - vì vậy bạn sẽ cần cung cấp thêm ví dụ, theo yêu cầu của Kirill. Vấn đề với việc có nhiều hơn một "văn bản" là nó sẽ không thể deserialize theo hướng ngược lại như serializer sẽ không thể xác định tài sản mà mỗi "văn bản" bản đồ đến. Xin vui lòng cho nhiều hơn, vì vậy chúng tôi có thể giúp đỡ. –
như là một sang một bên - Tôi nghi ngờ bạn có nghĩa là [XmlIgnore] thay vì [NonSerialized]. –