【问题标题】:Customising element name of entries in an XML-serialised HashSet<string>在 XML 序列化的 HashSet<string> 中自定义条目的元素名称
【发布时间】:2012-09-25 23:57:55
【问题描述】:

我们真的可以在哈希集输出问题上使用一些帮助。除了一件事之外,我们让 HashSet Web 方法与 HashSet 完美配合。输出是一个 web 服务,如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 'xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://localhost/webservices">
    <string>201210XXXX</string>
    <string>201211XXXX</string>
</ArrayOfString>

这是完美的,除了客户要求输出的字符串行是“TN”和“/TN”标签行而不是字符串标签。认为这应该很容易并添加了我的额外课程,但我无法弄清楚如何做到这一点

HashSet<TN>;

我们构建了网络方法

[WebMethod]
public HashSet<string> GetFoneLines()
{
    HashSet<string> hs = new HashSet<string>();

    DataTable dt = new dal().GetPhoneLines();

    foreach (DataRow dr in dt.Rows)
    {
        hs.Add(dr[0].ToString());    
    }

    return hs;
}

并尝试扩展字符串类。学习字符串是密封的,我们只是尝试创建自己的类

public class TN
{
    public string tnumber;
}

这一定很简单,但经过 48 小时敲定代码后,我看不出如何创建 TN 哈希而不是字符串哈希。

【问题讨论】:

  • XML 样本中没有 TN。
  • 请给你的问题一个有意义的标题。
  • 那么你在序列化的时候得到了什么?你必须通过你的网络方法返回一个 HashSet 吗?因为我非常怀疑带有 TN 元素的 ArrayOfString 是否会反序列化为 HashSet。不过可能是错的。
  • 看起来您正在序列化 string[] 而不是 TNTN[]。 TN 也绝对是一个坏名声。
  • 我需要为 HashSet 添加一个类型,它的作用类似于字符串,但输出标签应为 201211xxxx

标签: c# web-services .net-3.5 deserialization webmethod


【解决方案1】:

尝试使用自定义 XML 序列化属性来装饰您的类,如下所示:

public class TN
{
    [XmlElement(ElementName="TN")]
    public string tnumber;

}

MSDN

【讨论】:

  • 错误 2 参数 '1': 无法从 'string' 转换为 'WebService1.TN' 我喜欢它但收到错误
  • 无法让 TN 表现得像 String 或成为 String 的扩展。
  • @Agrapha:你什么时候收到这样的错误?您在“扩展名”下是什么意思?在序列化期间还是在 C# 代码中?
  • 哇,睡眠能给人带来多大的不同。问题是我填充 HASHSET 的内容。看看网络方法。 foreach 中的行“hs.Add(dr[0].ToString());”如果我创建一个 TN 对象并要求哈希对其进行哈希处理,那没关系,但我尝试用 ToString() 填充它......我真正需要的是一个 .ToTN() 方法。
  • 遗憾的是,我花了 2 年时间才看到这个建议的简单性。为什么我以前没有看到你的回答的优雅,我不知道。如此简单,优雅。我应该检查你的答案是否正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多