首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用YAXLib库实现XML对象

使用YAXLib库实现XML对象
EN

Stack Overflow用户
提问于 2021-12-22 10:12:52
回答 1查看 45关注 0票数 1

下面有一个xml表单,告诉我如何反序列化它以获得一个对象。使用YAXLib库

代码语言:javascript
复制
<catalog>
    <categories>
        <category id="1">category 1</category>
        <category id="59349641">category 2</category>
        <category id="303608809">category 3</category>
        <category id="303614009">category 4</category>
        <category id="303643009">category 5</category>
    </categories>
</catalog>

如何使用属性从xml ml中获取对象

我试过这门课,但没有被解析。

代码语言:javascript
复制
public class Сatalog
    {    
        public List<Category> categories { get; set; }
    }

public class Category
    {

        [YAXSerializeAs("id")]
        public int Id { get; set; }

        [YAXElementFor("category")]
        public string category { get; set; }

        [YAXSerializeAs("parentId")]
        public int ParentId { get; set; }    
    }

试过像这样

代码语言:javascript
复制
  public class Сatalog
    {    
        public List<string> categories { get; set; }
    }

所以我们只得到文本类别

EN

回答 1

Stack Overflow用户

发布于 2022-08-27 08:35:00

对于那些无意中遇到类似问题的人来说:

下面是去/序列化的代码:

代码语言:javascript
复制
[Test]
public void Xml_To_Object_YAXLib()
{
    const string xml = @"<catalog>
  <categories>
    <category id=""1"">category 1</category>
    <category id=""59349641"">category 2</category>
    <category id=""303608809"">category 3</category>
    <category id=""303614009"">category 4</category>
    <category id=""303643009"">category 5</category>
  </categories>
</catalog>";
    var serializer = new YAXSerializer(typeof(Catalog),new SerializerOptions
    {
        ExceptionHandlingPolicies = YAXExceptionHandlingPolicies.ThrowWarningsAndErrors,
        ExceptionBehavior = YAXExceptionTypes.Error,
        SerializationOptions = YAXSerializationOptions.DontSerializeNullObjects
    });

    var deserialized = (Catalog) serializer.Deserialize(xml);
    var serialized = serializer.Serialize(deserialized);
    Assert.That(serialized, Is.EqualTo(xml));
    Assert.That(deserialized.Categories.Count, Is.EqualTo(5));
    Assert.That(deserialized.Categories[4].Id, Is.EqualTo(303643009));
}

这就是如何用属性来修饰类来指导YAXSerializer

代码语言:javascript
复制
[YAXSerializeAs("catalog")]
public class Catalog
{
    [YAXSerializeAs("categories")]
    public List<Category> Categories { get; set; }
}

代码语言:javascript
复制
[YAXSerializeAs("category")]
public class Category
{
    [YAXSerializeAs("id")]
    [YAXAttributeForClass]
    public int Id { get; set; }

    [YAXValueForClass]
    public string CategoryName { get; set; }

    /// <summary>
    /// Assuming, this should also become an attribute to Category
    /// (although DevOp's XML didn't contain it)
    /// </summary>
    [YAXSerializeAs("parentId")]
    [YAXAttributeForClass]
    [YAXErrorIfMissed(YAXExceptionTypes.Ignore)]
    public int? ParentId { get; set; } 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70447395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档