相关疑难解决方法(0)

将XML转换为动态C#对象

我使用以下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,然后重新使用上面的代码,但这就像是作弊.

谢谢.

c# xml json

56
推荐指数
3
解决办法
7万
查看次数

使用XmlSerializer反序列化随机/未知类型

我正在使用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实例之前将其映射到正确的类型.

有没有更好的方法呢?

.net c# xml serialization xmlserializer

13
推荐指数
1
解决办法
1万
查看次数

从动态xml转换为c#对象

我需要输入将动态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)

.net c# dynamic expandoobject c#-4.0

6
推荐指数
2
解决办法
2万
查看次数

动态创建 C# 类或对象

我有这个结构。

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# 中动态创建类?” 但这些链接中的答案不会被引用为返回值或引用另一个类。我怎样才能做到这一点?

c# properties dynamic

6
推荐指数
1
解决办法
2万
查看次数

在属性名称为动态时使用ExpandoObject,这可能吗?

我需要创建一个具有动态命名属性的对象,例如:

<users>
  <user1name>john</user1name>
  <user2name>max</user2name>
  <user3name>asdf</user3name>
</users>
Run Code Online (Sandbox Code Playgroud)

这可能吗?

c# dynamic expandoobject

0
推荐指数
1
解决办法
1814
查看次数