mit dem folgenden Stück xml-Code:Serialisierung ändert den Attributwert bei der Verwendung von <oder> (‚<' or '>‘)
<SD GID="<empty>" T="2017-07-31T13:37:48Z"><empty></SD>
Von einer XSD-Datei i Klassen generiert mit xsd.exe und der entsprechenden Klasse für Deserialisieren/dieses Element Serialisierung ist die folgende:
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://autosar.org/schema/r4.0")]
public partial class SD {
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute(DataType = "NMTOKEN")]
public string GID;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string S;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string T;
/// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
public string Value;
}
Da es diese Linie deserialisiert wurde auch auf dem folgenden Bild zu sehen ist, die ‚<‘ und ‚>‘ Zeichen richtig decodiert wurden: Quickwatch
Ich möchte nur die Serialisierung zurück, ohne den Inhalt zu ändern, aber diese Linie Linie auf die folgende Art und Weise übersetzt zurück:
<SD GID="_x003C_empty_x003E_" T="2017-07-31T13:37:48Z"><empty></SD>
So im Wertfeld gibt es die richtige Zeichenfolge, nach der XML-Standard, aber im GID-Attribut werden die '<' und '>' nicht richtig übersetzt.
Der Hauptcode ist sehr einfach:
namespace MyXMLHandler
{
using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
internal class Program
{
private static void Main(string[] args)
{
MyType a = DeserializeObject(
@"source.arxml");
SerializeObject(
@"source_SERIALIZED.arxml",
a);
}
private static MyType DeserializeObject(string filename)
{
var serializer = new XmlSerializer(typeof(MyType));
XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();
StreamReader reader = new StreamReader(filename, Encoding.UTF8);
MyType i;
i = (MyType)serializer.Deserialize(reader);
return i;
}
private static void SerializeObject(string filename, MyType i)
{
var serializer = new XmlSerializer(typeof(MyType));
Stream fs = new FileStream(filename, FileMode.Create);
var settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = " ";
settings.Encoding = Encoding.UTF8;
var writer = XmlWriter.Create(fs, settings);
serializer.Serialize(writer, i);
writer.Close();
}
}
}
Was ist der Grund für die falsche Übersetzung dieser charachters im Attribut sein kann?
Nein, es ist nicht markiert. –
Wenn Sie 'DataType =" NMTOKEN "' entfernen, wird das Problem gelöst. –