Tôi có một loạt các lớp C#, được tạo tự động từ một XSD. Sau đó, tôi tạo các tệp XML dựa trên các lớp C# đó. Hiện không có nội dung nào.Tôi có thể có thuộc tính null và thuộc tính khác tại cùng một thẻ trong XML được tạo bởi lớp XSD C# được tạo không?
Vấn đề:
Các tập tin XML được tạo ra đang trải qua xác nhận và xác nhận yêu cầu một thuộc tính thêm vào tất cả các thẻ XML với xsi:nil="true"
. Về cơ bản các thẻ sẽ giống như: <testTag.01 xsi:nil="true" NV="123123" />
, nhưng tôi không thể đạt được điều đó trong C#. Mã của tôi là:
if (myObject.TestTag.HasValue) { t.testTag01 = new testTag01(); t.testTag01.Value = myObject.TestTag.Value; } //else //{ // t.testTag01 = new testTag01(); // t.testTag01.NV = "123123";//Not Recorded //}
Mã này tạo <testTag.01>SomeValue</testTag.01>
hoặc <testTag.01 xsi:nil="true"/>
.
Nếu tôi bỏ ghi chú ELSE, kết quả sẽ là: <testTag.01>SomeValue</testTag.01>
hoặc <testTag.01 NV="123123" />
.
Vì vậy, tôi không có ý tưởng làm thế nào để có được định dạng, được yêu cầu bởi công cụ xác nhận. Bất kỳ ý tưởng?
P.S.
Đây là tính năng tự động tạo ra C# lớp:
/// [System.CodeDom.Compiler.GeneratedCodeAttribute ("xsd", "4.0.30319.33440")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute ("code")] [System.Xml.Serialization.XmlTypeAttribute (AnonymousType = true, Namespace = "http://www.blabla.org ")]
lớp công khai một phần testTag01 {
private string nvField; private SomeEnum valueField; /// <remarks/> [System.Xml.Serialization.XmlAttributeAttribute()] public string NV { get { return this.nvField; } set { this.nvField = value; } } /// <remarks/> [System.Xml.Serialization.XmlTextAttribute()] public SomeEnum Value { get { return this.valueField; } set { this.valueField = value; } } }
Tôi không muốn thay đổi phần đó, nhưng tôi hiểu điều đó là không thể nếu không thực hiện. Ngoài ra tôi đã cố gắng để thiết lập SomeEnum là Nullable. public SomeEnum? Value
, nhưng là ném một ngoại lệ:
Cannot serialize member 'Value' of type System.Nullable`1[]. XmlAttribute/XmlText cannot be used to encode complex types.
Cần xem các lớp được tạo tự động. Những thứ này thường cần được chỉnh sửa. Bạn không cần phải thêm mã để tạo ra các giá trị rỗng. – jdweng
Tôi đã xếp lớp. Ngoài ra tôi đã cố gắng thiết lập giá trị để Nullable, nhưng nó là ném một ngoại lệ. :-( – Tech0
Thao tác này sẽ không hoạt động. Hãy xem [** Xsi: nil Hỗ trợ ràng buộc thuộc tính **: Thuộc tính nil và các thuộc tính khác] (https://msdn.microsoft.com/en-us/library/ ybce7f69.aspx) – dbc