我使用以下C#代码使用JSON.Net框架将一串JSON数据转换为动态对象:
// Creates a dynamic .Net object representing the JSON data
var ProductDB = JsonConvert.DeserializeObject<dynamic>(JsonData);
Run Code Online (Sandbox Code Playgroud)
转换后,我可以使用以下代码直接访问元素:
// Variables to be used
string ProductID;
string ProductType;
int ProductQty;
// Loop through each of the products
foreach (dynamic product in ProductDB.products)
{
ProductID = product.id;
ProductType = product.type;
ProductQty = product.qty;
}
Run Code Online (Sandbox Code Playgroud)
使用XML数据有什么类似的东西吗?我可以使用JSON.net将我的XML转换为JSON,然后重新使用上面的代码,但这就像是作弊.
谢谢.
我正在使用XmlSerializer与服务进行通信.这不是常规的SOAP服务,它有自己的XML对象类型.例如,我可能会要求一个<Capabilities>对象,但它可能会返回一个<Exception>.换句话说,我必须处理随机的XML文档类型.但是,我知道我必须处理哪些类型.
我想要做的是找到一个通用的方法来序列化/反序列化这些文档.问题是XmlSerializer需要在创建阶段知道类型.
这些不是封装在公共根元素中,因此[XmlInclude]在这种情况下,创建基类并使用该属性不起作用:
[XmlInclude(typeof(Exception))]
[XmlInclude(typeof(Capabilities))]
public abstract class BaseClass
{
public BaseClass()
{
SchemaLocation = "test";
}
[XmlAttribute("schemaLocation")]
public String SchemaLocation { get; set; }
}
[XmlRoot("Exception")]
public class Exception : BaseClass
{
public Exception():base()
{
}
[XmlElement]
public String Message { set; get; }
}
[XmlRoot("Capabilities")]
public class Capabilities : BaseClass
{
public Capabilities() : base()
{}
[XmlElement]
public String ServiceName { set; get; }
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的解决方案是使用XmlReader手动探测根元素,然后在创建XmlSerializer实例之前将其映射到正确的类型.
有没有更好的方法呢?
我需要输入将动态xml转换为定义的c#对象模型
我的样本xml如下:
<?xml version="1.0" encoding="utf-8" ?>
<Persons>
<Person>
<Id>10</Id>
<FirstName> Dino </FirstName>
<LastName> Esposito </LastName>
<Addresses>
<Address>
<AddressType>BillTo</AddressType>
<Street1></Street1>
<Street2></Street2>
<Street3></Street3>
<City>Moscow</City>
</Address>
<Address>
<AddressType>ShipTo</AddressType>
<Street1></Street1>
<Street2></Street2>
<Street3></Street3>
<City>Moscow</City>
</Address>
<Address>
<AddressType>Contact</AddressType>
<Street1></Street1>
<Street2></Street2>
<Street3></Street3>
<City>Moscow</City>
</Address>
</Addresses>
</Person>
</Persons>
Run Code Online (Sandbox Code Playgroud)
我希望在运行时将此xml的值转换为C#对象.我希望定义一个类似于下面的对象:我的预期类对象C#如下:
public class Person
{
public int Id { get; set; }
public String FirstName { get; set; }
public String LastName { get; set; }
public IList<Address> Addresses { get; set; }
}
public class Address
{
public string …Run Code Online (Sandbox Code Playgroud) 我有这个结构。
public class FirstClass
{
public List<Foo> FooList{ get; set; }
}
public class Foo{
//Ex:
//public string Name{ get; set; }
}
public List<Foo> GetFoo(){
//I'm use Firstclass like this here typeof(FirstClass);
//I want create here dynamic property for Foo class.
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我想从“GetFoo()”函数为“Foo”类创建属性。同时,该函数返回“List”“Foo”类型。我正在研究“在运行时动态添加 C# 属性”、“如何在 C# 中动态创建类?” 但这些链接中的答案不会被引用为返回值或引用另一个类。我怎样才能做到这一点?
我需要创建一个具有动态命名属性的对象,例如:
<users>
<user1name>john</user1name>
<user2name>max</user2name>
<user3name>asdf</user3name>
</users>
Run Code Online (Sandbox Code Playgroud)
这可能吗?