我正在開發一個 C# 程式,我正在嘗試序列化 XML。
我有以下標簽:
using System.Xml.Serialization;
...
[XmlElement("MV")]
public MultiVerse MultiVerse { get; set; }
當我不填寫這個值時,標簽<MV>不存在,但我想<MV/>在這種情況下獲得一個標簽:
目前我有<HM><ID>Some_ID</ID></HM>。
我想要<HM><ID>Some_ID</ID><MV/></HM>.
我已經嘗試過在行之前使用 ,[Required]但是沒有用,我認為填寫IsNullable屬性是一種好方法。
Edit1,在網上查了一些資料,
網上有不少修改的建議,XmlWriter但是在我的專案中,整個序列化是這樣完成的:
public override string ToString()
{
...
using (var stream = new StringWriter())
using (var writer = XmlWriter.Create(stream, settings))
{
var serializer = new XmlSerializer(base.GetType());
serializer.Serialize(writer, this, ns);
return stream.ToString();
}
...
}
如您所見,這太通用了,我不想在這里做任何修改,因此我正在尋找一種自定義[XmlElement]指令的方法。
EDIT2:XmlWriter的設定:
該XmlWriter settings如下所示:
// Remove Declaration
var settings = new XmlWriterSettings
{
Indent = false,
OmitXmlDeclaration = true,
NewLineHandling = NewLineHandling.None,
NewLineOnAttributes = false,
};
有人有想法嗎?
提前致謝
uj5u.com熱心網友回復:
有https://docs.microsoft.com/en-us/dotnet/api/system.xml.serialization.xmlelementattribute.isnullable?view=net-6.0所以例如
[XmlElement("MV", IsNullable=true)]
public MultiVerse MultiVerse { get; set; }
對于空值,會給你一個序列化<MV xsi:nil="true" />(或者可能<MV xsi:nil="true"></MV>確保短標簽符號不是標準撰寫者讓你控制的東西,但我的經驗是 .NET 通常將它用于空元素,所以你可能很幸運您想要的序列化格式是默認的 .NET 輸出)。
uj5u.com熱心網友回復:
這是我目前解決問題的方式(不要笑):
public override string ToString()
{
string temp = base.ToString();
temp = temp.Replace(" p2:nil=\"true\"", "");
temp = temp.Replace(" xmlns:p2=\"http://www.w3.org/2001/XMLSchema-instance\"", "");
temp = temp.Replace("MV />", "MV/>");
return temp;
}
這太可怕了!有人有更好的解決方案嗎?
謝謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/389678.html
上一篇:在自定義視圖中初始化XML屬性
