Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以将对象序列化为字符串表示形式而不是超描述性嵌套xml?_C#_Serialization - Fatal编程技术网

C# 是否可以将对象序列化为字符串表示形式而不是超描述性嵌套xml?

C# 是否可以将对象序列化为字符串表示形式而不是超描述性嵌套xml?,c#,serialization,C#,Serialization,我有一个类,它描述了两个数字的比率,它需要一个字符串,可以由程序任意转换成十进制。我希望它被序列化到一个设置文件中,这样用户就可以在空闲时输入像这样序列化的值(例如1/2、4/5、6/3等等) <ZoneInterface> <Ratio1> <Value>0</Value> </Ratio1> <Ratio2> <Value>2/3</Value&g

我有一个类,它描述了两个数字的比率,它需要一个字符串,可以由程序任意转换成十进制。我希望它被序列化到一个设置文件中,这样用户就可以在空闲时输入像这样序列化的值(例如1/2、4/5、6/3等等)

<ZoneInterface>
    <Ratio1>
        <Value>0</Value>
    </Ratio1>
    <Ratio2>
        <Value>2/3</Value>
    </Ratio2>
</ZoneInterface>
您可以在Value属性上使用。请参阅下面的工作示例。可以删除该属性以检查其行为

using System;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

namespace SomeNamespace
{
    public class Program
    {
        static void Main()
        {
            Ratio r = new Ratio { Value = "2/3" };
            XmlSerializer serializer = new XmlSerializer(typeof(Ratio));
            StringBuilder sb = new StringBuilder();
            using (XmlWriter writer = XmlWriter.Create(sb))
            {
                serializer.Serialize(writer, r);
            }
            Console.Write(sb);
            // prints as <Ratio>2/3</Ratio> (if you can ignore the xlmns:xsi clutter)
            // without [XmlText], would print as <Ratio><Value>2/3</Value></Ratio>
        }
    }
   
    public class Ratio
    {
        [XmlText]
        public string Value { get; set; } = string.Empty;
    }
}
使用系统;
使用系统文本;
使用System.Xml;
使用System.Xml.Serialization;
名称空间名称空间
{
公共课程
{
静态void Main()
{
比率r=新比率{Value=“2/3”};
XmlSerializer serializer=新的XmlSerializer(typeof(Ratio));
StringBuilder sb=新的StringBuilder();
使用(XmlWriter=XmlWriter.Create(sb))
{
serializer.Serialize(writer,r);
}
写信给某人;
//打印为2/3(如果可以忽略xlmns:xsi杂波)
//如果没有[XmlText],将以2/3的格式打印
}
}
公营阶层比率
{
[XmlText]
公共字符串值{get;set;}=string.Empty;
}
}

您好,我想您可以使用XmlArrayItemAttribute:试试Json格式。检查此链接
[Serializable]
public class Ratio
{
    private static Regex ValidationRegex = new Regex(@"^\d+/\d+$");
    public string Value
    {
        get
        {
            return denominator == 1 ?
                $"{numerator}" :
                $"{numerator}/{denominator}";
        }
        set
        {
            if (ValidationRegex.IsMatch(value))
            {
                var args = value.Split('/');
                numerator = Int32.Parse(args[0]);
                denominator = Int32.Parse(args[1]);
            }
            else if (int.TryParse(value, out var result))
            {
                numerator = result;
                denominator = 1;
            }
            else
            {
                throw new InvalidDataException($"Unable to parse ratio {value}, must be of form \"[integer]/[integer]\"");
            }
            if (denominator == 0)
            {
                throw new InvalidDataException($"Unable to parse ratio {value}, cannot divide by zero");
            }
        }
    }
    private int numerator;
    private int denominator;

    public static implicit operator Ratio(string str)
    {
        return new Ratio() { Value = str };
    }

    public Decimal Decimal => ((decimal)numerator / (decimal)denominator);
}
using System;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

namespace SomeNamespace
{
    public class Program
    {
        static void Main()
        {
            Ratio r = new Ratio { Value = "2/3" };
            XmlSerializer serializer = new XmlSerializer(typeof(Ratio));
            StringBuilder sb = new StringBuilder();
            using (XmlWriter writer = XmlWriter.Create(sb))
            {
                serializer.Serialize(writer, r);
            }
            Console.Write(sb);
            // prints as <Ratio>2/3</Ratio> (if you can ignore the xlmns:xsi clutter)
            // without [XmlText], would print as <Ratio><Value>2/3</Value></Ratio>
        }
    }
   
    public class Ratio
    {
        [XmlText]
        public string Value { get; set; } = string.Empty;
    }
}