C#Newton.Json反序列化

时间:2016-04-19 17:04:29

标签: c# json xml serialization

我想读取一个xml并转换json,然后将该json转换为C#对象。 请记住,我可以使用linq初始化对象,我知道。 但是我想要实现的是读取xml将其转换为json并从转换后的字符串Deserialize转换为object。我无法正确初始化对象。 我错过了什么?

public class Cash
{
    public string Amount { get; set; }
}

public class POSLog
{
    public string MajorVersion { get; set; }
    public string MinorVersion { get; set; }
    public string FixVersionive { get; set; }

    public Cash Cashx { get; set; }   
}

public class Program
{
    public static void Main(string[] args)
    {
        try
        {
            XmlDocument xml = new XmlDocument();
            xml.LoadXml("<POSLog MajorVersion=\"6\" MinorVersion=\"0\" FixVersion=\"0\"><Cash Amount = \"100\"></Cash></POSLog>");

            string json = JsonConvert.SerializeObject(xml.InnerXml);

            POSLog deserializedProduct = JsonConvert.DeserializeObject<POSLog>(json);

            Console.WriteLine("Major Version" + deserializedProduct.MajorVersion);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

3 个答案:

答案 0 :(得分:1)

您无法将包含string的{​​{1}}序列化为xml,并希望将其反序列化为json。在继续之前将您的xml反序列化为POSLog

答案 1 :(得分:0)

问题是你正在反序列化错误的东西。

您必须首先从XML反序列化为POSLog,然后将POSLog序列化为json。

void Main()
{
    try
    {
        string xmlDoc = "<POSLog MajorVersion=\"6\" MinorVersion=\"0\" FixVersion=\"0\"><Cash Amount = \"100\"></Cash></POSLog>";

        XmlSerializer xser = new XmlSerializer(typeof(POSLog));
        POSLog fromXml = xser.Deserialize(new StringReader(xmlDoc)) as POSLog;

        string json = JsonConvert.SerializeObject(fromXml); 

        POSLog fromJson = JsonConvert.DeserializeObject<POSLog>(json);

        Console.WriteLine("MajorVersion=" + fromJson.MajorVersion);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

// Define other methods and classes here
public class Cash
{
    public string Amount { get; set; }
}

public class POSLog
{
    [XmlAttribute]
    public string MajorVersion { get; set; }
    [XmlAttribute]
    public string MinorVersion { get; set; }
    [XmlAttribute]
    public string FixVersionive { get; set; }

    public Cash Cashx { get; set; }
}

答案 2 :(得分:0)

根据文件:

<强> Converting between JSON and XML with Json.NET

  

转化规则

     
      
  • 元素保持不变。

  •   
  • 属性以@为前缀,应位于对象的开头。

  •   
  • 单个子文本节点是直接针对元素的值,否则可以通过#text访问它们。

  •   
  • XML声明和处理说明以?。

  • 为前缀   
  • 字符数据,注释,空白和重要的空白节点分别通过#cdata-section,#comment,#whitespace和#significant-whitespace进行访问。

  •   
  • 同一级别具有相同名称的多个节点被组合成一个数组。

  •   
  • 空元素为空。

  •   
     

如果从JSON创建的XML与您想要的不匹配,那么您需要手动转换它。执行此操作的最佳方法是将JSON加载到LINQ到JSON对象(如JObject或JArray),然后使用LINQ创建XDocument。

考虑到这一点,我们创建了以下单元测试来解决您的问题。

{{1}}