benim nesne seri için bu yöntemi kullanıyorum:.NET ile xml serileştirmesinin <?xml ?> bölümünü nasıl denetlerim?
public static string XmlSerialize(object o)
{
var stringWriter = new StringWriter();
var xmlSerializer = new XmlSerializer(o.GetType());
xmlSerializer.Serialize(stringWriter, o);
string xml = stringWriter.ToString();
stringWriter.Close();
return xml;
}
Şöyle başlar XML yapar:
<?xml version="1.0" encoding="utf-16"?>
<MyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
Ama böyle bakmak istiyorum:
<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
<MyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
Peki, kodlamayı Windows-1252'ye nasıl değiştirebilirim ve bağımsız olarak ayarlıyorum = evet? Ayrıca, nesneyi xmlns değerini hariç tutmak için nasıl alabilirim?
this one gibi birkaç benzer soru gördüm, ama benim için daha basit olabileceğini umuyordum, belki bir yere bazı özellikler ayarlayarak?
Güncelleme 2: John'un cevabına ve yorumlarına baktıktan sonra bunu daha fazla düşünerek, sadece ikinci bir yöntem yapmaya karar verdim. Bu vahşice özel xml'in sadece bir vesileyle üçüncü bir taraf için yaratılmasının ilk etapta "XmlSerialize" gibi genel bir şey olarak adlandırılması gerektiğini düşünmüyorum.
Yani, bir XML belgesi alan bir ikinci yöntem oluşturulur ve ilk böyle bir ad elemanı kaldırır: o John'un kodu ile XML yazar, daha sonra
xElement.Attributes().Where(a => a.IsNamespaceDeclaration && a.Value == "http://www.w3.org/2001/XMLSchema").Remove();
.
new XDeclaration("1.0", "Windows-1252", "yes").ToString()
Ve bu çirkin, ama tam olarak benim XML anlamak için bu 3 parti için gerekenleri beni alır: Nihayet bundan çıkışı sonrasında bu xml döndürür.
Gerçekten, 'XmlTextReader' ve' XmlTextWriter' yerine 'XmlReader.Create' ve' XmlWriter.Create' kullanın. Ayrıca, bu şeyleri 'using' bloklarına koymanız gerekiyor. –
Nihayetinde kodunuzla gittim. Ama sadece merak ediyorum, her şeyi kapattığım sürece, bu sadece blokları kullanmak kadar iyi değil mi? – Chris
Hayır. Kullanma “blokları”, istisnalar gerçekleştiğinde bile nesnelerin atıldığından emin olun. –