【问题标题】:Parse raw string to list of object将原始字符串解析为对象列表
【发布时间】:2021-09-18 13:40:26
【问题描述】:

我正在获取原始字符串值中的链接列表,有没有办法将原始字符串解析为对象列表?

例如:原始值:<links><link id="{xxxxx-xxx-xxx}" linkid="xxxxx-xxx-xxx" text="Visit" linktype="internal" target="blank" title="Visit" querystring="" linktext="Visit" /><link id="{xxxx-xxx-xxx}" linkid="xxxx-xxx-xxx" text="Apply" linktype="internal" target="blank" title="Apply" querystring="" linktext="Apply" /></links>

public IEnumerable<Link> Links {get;set;}

【问题讨论】:

  • 不确定这是否是 Sitecore 特有的问题(我从未使用过 Sitecore,也不知道 ti 是什么),但您不能只反序列化 XML 吗?
  • 您对这些链接使用哪种字段类型?
  • @ddfra 为迟到的回复道歉,我的客户正在使用 fieldsuite,但不知何故,generalLink 没有通过 glassmapper/linkfield 填充
  • 据我所知,一般链接只允许 1 个值。我的意思是你应该去掉开头的“”和结尾的“”,然后 GlassMapper 应该可以工作。但接下来的问题是:那个 标签是从哪里来的?
  • 可能是一些开发人员直接处理原始值? ;)

标签: c# sitecore


【解决方案1】:

试试这个

var xml=@"<links><link id='{xxxxx-xxx-xxx}' linkid='xxxxx-xxx-xxx' text='Visit' linktype='internal' target='blank' title='Visit' querystring='' linktext='Visit' /><link id='{xxxx-xxx-xxx}' linkid='xxxx-xxx-xxx' text='Apply' linktype='internal' target='blank' title='Apply' querystring='' linktext='Apply' /></links>";

......

using System.Xml.Serialization;
    
    var serializer = new XmlSerializer(typeof(Links));
    
    Links links;

    using (StringReader reader = new StringReader(xml))
    {
        links = (Links)serializer.Deserialize(reader);
        
    }
    
foreach (var link in links.Link)
    {
        Console.WriteLine($"Id: {link.Id} Text: {link.Text} ");
    }
}

输出

Id: {xxxxx-xxx-xxx} Text: Visit 
Id: {xxxx-xxx-xxx} Text: Apply 

[XmlRoot(ElementName = "link")]
public class Link
{
    [XmlAttribute(AttributeName = "id")]
    public string Id { get; set; }
    [XmlAttribute(AttributeName = "linkid")]
    public string Linkid { get; set; }
    [XmlAttribute(AttributeName = "text")]
    public string Text { get; set; }
    [XmlAttribute(AttributeName = "linktype")]
    public string Linktype { get; set; }
    [XmlAttribute(AttributeName = "target")]
    public string Target { get; set; }
    [XmlAttribute(AttributeName = "title")]
    public string Title { get; set; }
    [XmlAttribute(AttributeName = "querystring")]
    public string Querystring { get; set; }
    [XmlAttribute(AttributeName = "linktext")]
    public string Linktext { get; set; }
}

[XmlRoot(ElementName = "links")]
public class Links
{
    [XmlElement(ElementName = "link")]
    public List<Link> Link { get; set; }
}

【讨论】:

  • 感谢@Serge 提供解决方案
猜你喜欢
  • 1970-01-01
  • 2017-09-02
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 2013-07-07
  • 2019-11-04
  • 2013-03-12
  • 1970-01-01
相关资源
最近更新 更多