我想读取一个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);
}
}
}
答案 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}}