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