我試圖通過序列化我的對象到XML構建CDA文件已經存在,這裏的XML部分是害我一些麻煩:XML元素的命名空間「TR」「」是在當前範圍內
<component>
<section>
<templateId root='2.16.840.1.113883.10.20.1.11'/>
<templateId root='1.3.6.1.4.1.19376.1.5.3.1.3.6'/>
<!--<id root='' extension=''/>-->
<code code="11450-4" displayName="PROBLEM LIST" codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC"/>
<title>Active Problem - Problem List</title>
<text>
<table>
<thead>
<tr>
<th>Problem</th>
<th>Code</th>
<th>Code System</th>
<th>Start Date</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<tr>
<td>Asthma</td>
<td>195967001</td>
<td>SNOMED CT</td>
<td></td>
<td>Active</td>
</tr>
<tr>
<td>Costal chondritis</td>
<td>64109004</td>
<td>SNOMED CT</td>
<td></td>
<td>Active</td>
</tr>
<tr>
<td>No impairment</td>
<td>66557003</td>
<td>SNOMED CT</td>
<td></td>
<td>Active</td>
</tr>
</tbody>
</table>
</text>
</section>
</component>
這裏是我的C#類其序列:
public class Section
{
[XmlElement("templateId")]
public List<IdElement> TemplateIds { get; set; }
[XmlElement("code")]
public CodeElement Code { get; set; }
[XmlElement("title")]
public string Title { get; set; }
[XmlElement("text")]
public Text Text { get; set; }
}
public class Text
{
[XmlElement("table")]
public Table.Table Table { get; set; }
[XmlArray("list")]
[XmlArrayItem("item")]
public List<string> List { get; set; }
[XmlElement("paragraph")]
public List<string> Paragraphs { get; set; }
}
public class Table
{
[XmlElement("thead")]
public TRow Header { get; set; }
[XmlElement("tbody")]
public TRow Body { get; set; }
}
public class TRow
{
[XmlArray(ElementName = "tr", Namespace = "")]
[XmlArrayItem("td")]
public List<string> RowData { get; set; }
[XmlArray(ElementName = "tr", Namespace = "")]
[XmlArrayItem("th")]
public List<string> HeaderData { get; set; }
}
但是當我嘗試現在連載我的CDA對象,它說,該型TR是在命名空間已經存在,所以我想這這種XML表已經存在,但我可以'找到一個正確的做法。 有沒有解決方法來解決這個問題?
這裏的錯誤日誌(沒有堆棧跟蹤):
System.InvalidOperationException:有反射類型 'Project.Cda.Core.ClinicalDocument' 錯誤。 ---> System.InvalidOperationException:有一個錯誤反映了 屬性'組件'。 ---> System.InvalidOperationException:有 反映類型'Project.Cda.Core.Components.BaseComponent'的錯誤。 ---> System.InvalidOperationException:反映屬性'組件'時出錯。 ---> System.InvalidOperationException:有 是反映類型'Project.Cda.Core.Components.Component'的錯誤。 ---> System.InvalidOperationException:反映屬性'Section'時發生錯誤。 ---> System.InvalidOperationException:有 反映類型'Project.Cda.Core.Components.Section'的錯誤。 ---> System.InvalidOperationException:有一個錯誤反映了 屬性'Text'。 ---> System.InvalidOperationException:有一個反映類型'Project.Cda.Core.Components.Text'的錯誤 。 ---> System.InvalidOperationException:反映 屬性「表」的錯誤。 ---> System.InvalidOperationException:有一個反映類型爲「Project.Cda.Core.Components.Table.Table」的 錯誤。 ---> System.InvalidOperationException:有一個錯誤反映了 屬性'標題'。 ---> System.InvalidOperationException:有一個反映類型'Project.Cda.Core.Components.Table.TRow'的錯誤 。 ---> System.InvalidOperationException:有一個錯誤反映了 屬性的'HeaderData'。 ---> System.InvalidOperationException:XML 元素'tr'來自命名空間''已經存在於當前的 範圍內。使用XML屬性爲元素指定另一個XML名稱或命名空間。
在'TRow'你在'RowData'和'HeaderData'上都有'[XmlArray(ElementName =「tr」,Namespace =「」)]''。這是行不通的。 – dbc
@dbc嗯,謝謝,我會嘗試別的。 是我唯一的選擇爲標題和正文數據創建單獨的類嗎? –
這是迄今爲止最簡單的。其他選項包括1)使用['[XmlChoiceIdentifierAttribute]'](https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlchoiceidentifierattribute(v = vs.110).aspx)設置指示'
回答
,因爲在
TRow
,你在兩個RowData
和HeaderData
有你所得到的錯誤。這是行不通的 - 你試圖爲兩個不同的屬性指定相同的元素名稱,因此得到你看到的錯誤,即命名空間的XML元素'tr'已經存在於當前作用域中。
此外,您的模型還有一個額外的問題。重複
<tbody>
中的<tr>
元素,但您的數據模型只允許每個物體有一個<tr>
元素。以下修復都通過引入中間
TablePart
問題來表示任一表中的標題和正文部分:樣品fiddle。
來源
2017-09-26 10:25:10 dbc
相關問題