JSON 输出中的 DICOM RetrieveURL 标记为空

DICOM RetrieveURL tag is empty in JSON output

我正在使用 DicomDataSet 添加标签及其值,如下所示:

....
var ds = new DicomDataSet();
ds.Initialize(DicomClassType.StudyRootQueryStudy, DicomDataSetInitializeFlags.None);
ds.InsertElementAndSetValue(DicomTag.QueryRetrieveLevel, "STUDY"); 
ds.InsertElementAndSetValue(DicomTag.SpecificCharacterSet, "ISO_IR192");  
ds.InsertElementAndSetValue(DicomTag.RetrieveURL,  "http://localhost/Service/api/wado-rs/studies/" + row.StudyInstanceUID); 
....

当我按 ds 制作 json 时,我看不到 00081190 的价值,例如 this link.

中的 json

制作json文件截图代码:

string jsonFileNameOut = Path.Combine(@"C:\Study", $"{DateTime.Now.Ticks}.json"); 
// Save as JSON with no binary data 
// For the demo, keep the json output file size small by skipping the pixel data 
const DicomDataSetSaveJsonFlags jsonFlags = DicomDataSetSaveJsonFlags.IgnoreBinaryData |
                                            DicomDataSetSaveJsonFlags.TrimWhiteSpace;
ds.SaveJson(jsonFileNameOut, jsonFlags);

为什么 vrRetrieveUrl(81190) 标签的值表示是 UN(未知),输出如下所示:

[{
  "00080005" : { 
   "vr" : "CS", 
   "Value" : [ 
     "ISO_IR 192"
   ] 
   },
  "00080052" : { 
   "vr" : "CS", 
   "Value" : [ 
     "STUDY"
   ] 
   },
  "00081190" : { 
   "vr" : "UN"
   }
  }]

我看了很多文章终于找到了解决方案我决定post这里的解决方案是为了那些像我这样不知道的人。

所以在 DICOM 协议中有一些私有标签 vr(值表示)在解析为 jsonxml 后默认为 UN 所以他们不会出现在输出中。

所以我们应该为 public 创建私人标签并为他们手动设置 vr 就像我下面做的那样:

DicomElement dm = ds.InsertElement(null, false, DicomTag.RetrieveURL, DicomVRType.UT, false, 1);
if (dm != null)
{
    ds.FreeElementValue(dm); 
    ds.SetStringValue(dm, url, DicomCharacterSetType.UnicodeInUtf8);
}

InsertElement and SetStringValue解决的问题。