【问题标题】:Modify data during Serialization - C# - Json.Net序列化期间修改数据 - C# - Json.Net
【发布时间】:2017-02-24 12:13:38
【问题描述】:

我在 C# 中有一个可序列化的类,如下所示

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

我正在从数据库中获取数据并映射到这个类。我有需求

  1. DeskNumber 将包含以下格式的数据

    格式1。

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

    格式2

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

    在序列化过程中,如果数据是第一个数据,我需要在标签下返回值(即 .164)。数字标签下的值在不同的时间会有所不同。所以需要一个逻辑查找数字标签下的值。如果数据在任何其他“Format1”以外的格式,然后将其返回为空白。

    或者

我可以应用这个逻辑,即使它是在设置值期间而不是在序列化期间

谁能帮忙解决这个问题

【问题讨论】:

  • 您通常会通过实现自定义 Json 序列化来做到这一点。例如结合 Google 的 JsonConverter 属性用于“Json.Net 自定义序列化”
  • Format1 和 Format2 是不同时间传入的文件内容吗?
  • Format1 和 Format2 是简单的字符串格式,我从数据库中获取它。因此,与其使序列化程序逻辑复杂化,是否可以在 DeskNumber 属性的 set 方法中应用此逻辑。从数据库本身获取我可以修改数据

标签: c# .net json serialization json.net


【解决方案1】:

如果 Format1Format2 是不同的文件内容 次你可以特别序列化 XmlContent 这段代码

试试这个

        // 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);

您可以查看www.bilisim.io了解详细信息

【讨论】:

  • 你能看看我在问题下面添加的评论吗
  • Format1 和 Format2 是简单的字符串格式,我从数据库中获取它。因此,与其使序列化程序逻辑复杂化,是否可以在 DeskNumber 属性的 set 方法中应用此逻辑。从数据库本身获取我可以修改数据
【解决方案2】:

使用以下代码,您将在数字标签下获得值。 resultsMessage.Number 包含所需的结果

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; }
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 2019-01-29
    • 2011-02-02
    • 1970-01-01
    相关资源
    最近更新 更多