XML名前空間も自動的にシリアル化せずに.NETでオブジェクトをシリアル化する方法はありますか?デフォルトでは、.NETはXSIおよびXSD名前空間を含める必要があると考えているようですが、私はそれらをそこに含めたくありません。
Wes P
質問する
114196 次
6 に答える
156
ああ...気にしないで。答えが得られるのは、常に質問が提起された後の検索です。シリアル化されている私のオブジェクトはobj
定義されており、すでに定義されています。単一の空の名前空間を持つXMLSerializerNamespaceをコレクションに追加すると、うまくいきます。
このようなVBでは:
Dim xs As New XmlSerializer(GetType(cEmploymentDetail))
Dim ns As New XmlSerializerNamespaces()
ns.Add("", "")
Dim settings As New XmlWriterSettings()
settings.OmitXmlDeclaration = True
Using ms As New MemoryStream(), _
sw As XmlWriter = XmlWriter.Create(ms, settings), _
sr As New StreamReader(ms)
xs.Serialize(sw, obj, ns)
ms.Position = 0
Console.WriteLine(sr.ReadToEnd())
End Using
このようなC#で:
//Create our own namespaces for the output
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
//Add an empty namespace and empty value
ns.Add("", "");
//Create the serializer
XmlSerializer slz = new XmlSerializer(someType);
//Serialize the object with our own namespaces (notice the overload)
slz.Serialize(myXmlTextWriter, someObject, ns);
于 2008-11-03T15:23:54.227 に答える
21
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
余分なとを取り除きたいxmlns:xsd="http://www.w3.org/2001/XMLSchema"
が、それでも独自の名前空間xmlns="http://schemas.YourCompany.com/YourSchema/"
を保持したい場合は、この単純な変更を除いて、上記と同じコードを使用します。
// Add lib namespace with empty prefix
ns.Add("", "http://schemas.YourCompany.com/YourSchema/");
于 2010-02-12T01:19:05.353 に答える
9
このヘルパークラスを提案します:
public static class Xml
{
#region Fields
private static readonly XmlWriterSettings WriterSettings = new XmlWriterSettings {OmitXmlDeclaration = true, Indent = true};
private static readonly XmlSerializerNamespaces Namespaces = new XmlSerializerNamespaces(new[] {new XmlQualifiedName("", "")});
#endregion
#region Methods
public static string Serialize(object obj)
{
if (obj == null)
{
return null;
}
return DoSerialize(obj);
}
private static string DoSerialize(object obj)
{
using (var ms = new MemoryStream())
using (var writer = XmlWriter.Create(ms, WriterSettings))
{
var serializer = new XmlSerializer(obj.GetType());
serializer.Serialize(writer, obj, Namespaces);
return Encoding.UTF8.GetString(ms.ToArray());
}
}
public static T Deserialize<T>(string data)
where T : class
{
if (string.IsNullOrEmpty(data))
{
return null;
}
return DoDeserialize<T>(data);
}
private static T DoDeserialize<T>(string data) where T : class
{
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(data)))
{
var serializer = new XmlSerializer(typeof (T));
return (T) serializer.Deserialize(ms);
}
}
#endregion
}
:)
于 2015-02-19T12:43:21.900 に答える
0
XmlWriterSettings settings = new XmlWriterSettings
{
OmitXmlDeclaration = true
};
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
StringBuilder sb = new StringBuilder();
XmlSerializer xs = new XmlSerializer(typeof(BankingDetails));
using (XmlWriter xw = XmlWriter.Create(sb, settings))
{
xs.Serialize(xw, model, ns);
xw.Flush();
return sb.ToString();
}
于 2019-11-21T16:06:07.127 に答える