2017-02-24 1 views
0

Ich habe eine seializable Klasse in C# wie untenÄndern von Daten während Serialisierung - C# - Json.Net

namespace DataRequest 
    { 
    [Serializable] 
    public class BaseData 
    { 
    [JsonProperty(PropertyName = "u_additional_info")] 
    public string DeskNumber { get; set; } 
    } 
    } 

Ich bin das Abrufen von Daten aus Datenbank und Zuordnung zu diesen class.I haben Anforderung

  1. DeskNumber enthält Daten im folgenden Format

    Format1.

    <AdditionalInfo><Number>164</Number></AdditionalInfo> 
    

    Format2

    AdditionalInfo><Code>GLW51</Code><Lang>GLW51</LangCode><TzCode>GLW51</TzCode></AdditionalInfo> 
    

    Bei der Serialisierung, wenn Daten 1. fromat ist ich brauche Wert unter Tag zurückkehrt (dh 0,164) .Value unter der Nummer Tag wird an verschiedenen time.So unterschiedlich sein, um eine Logik brauchen find value unter Number tag. Wenn Daten in einem anderen Format als "Format1" vorliegen, geben Sie sie als leer zurück.

    Oder

Ich bin in Ordnung, auf der Anwendung ths Logik, auch wenn sein bei der Werteinstellung, nicht während der Serialisierung

Kann jemand auf diesen den folgenden Code

+0

Sie würden dies normalerweise tun, indem Sie benutzerdefinierte JSON-Serialisierung implementieren. z.B. in Verbindung mit dem JsonConverter-Attribut Google für "Json.Net benutzerdefinierte Serialisierung" – Joe

+0

Format1 und Format2 sind Dateiinhalte kommen zu verschiedenen Zeiten? –

+0

Format1 und Format2 sind einfache String-Format, dass ich es aus der Datenbank holen.So komplizierter als Serialisierung Logik, ist es möglich, diese Logik in set Methode der DeskNumber -Eigenschaft.Fügen von db selbst kann ich die Daten ändern – vmb

Antwort

0

Verwenden helfen, Sie erhält den Wert unter dem Nummern-Tag. resultingMessage.Number enthält das gewünschte Ergebnis

string name = YourXmlNodes; 

XmlSerializer serializer = new XmlSerializer(typeof(AdditionalInfo)); 
MemoryStream memStream = new MemoryStream(Encoding.UTF8.GetBytes(name)); 
AdditionalInfo resultingMessage= (AdditionalInfo)serializer.Deserialize(memStream); 


namespace ConsoleApplication1 
    { 
     [XmlRoot(ElementName = "AdditionalInfo")] 
     public class AdditionalInfo 
     { 
      [XmlElement(ElementName = "Number")] 
      public string Number { get; set; } 
     } 
    } 
0

wenn Format1 und Format2 sind gleiche Dateiinhalte auf verschiedenen mal kommen in können Sie spesitifcly serialisierten XmlContent

dieser Code

Try dies

 // Generic DeSerialization metod. 
     public T DeSerialization<T>(string xmlStrig) where T : class 
     { 
      XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); 
      using (StringReader sReader = new StringReader(xmlStrig)) 
      { 
       return (T)xmlSerializer.Deserialize(sReader); 
      } 
     } 

     // Accepted class 
     [Serializable]  
     public class AdditionalInfo 
     { 
      [XmlElement] 
      public string Number { get; set; } 
     } 

     // DeSerialize to Object code 
     // if you have Xml-string you can send parameter XmlString directly 
     // string xmlString = System.IO.File.ReadAllText(@"..\\XMLFile1.xml"); 
     AdditionalInfo ast = DeSerialization<AdditionalInfo>(yourXmlString); 

Sie können www.bilisim.io für detaillierte Informationen überprüfen

+0

können Sie aussehen auf dem Kommentar, dass ich unten Frage hinzugefügt – vmb

+0

Format1 und Format2 sind einfache String-Format, dass ich es aus der Datenbank holen.So, anstatt Serialisierer Logik zu verkomplizieren, ist es möglich, diese Logik in set Methode der DeskNumber-Eigenschaft.Feed von db selbst kann ich Ändern Sie die Daten – vmb

Verwandte Themen