仅使用属性值将对象序列化为字符串

时间:2019-07-16 08:20:23

标签: c# serialization

这是一个非常简单的问题,我无法在此处找到与我的问题相关的解决方案。

给出以下单个对象

    Foo foo = new Foo
{
    A = "Tom",
    B = "Mark",
    C = "Paul",
    D = "John"
};

我需要以下输出:

  

汤姆,马克,保罗,约翰

使用以下方法序列化对象时:

string s = JsonConvert.SerializeObject(foo);

我得到以下信息:

  

{A =“汤姆”,B =“马克”,C =“保罗”,D =“约翰”}

注意:这不是列表,仅列出该类的一个实例。

我知道我可以通过覆盖类中的字符串来实现这一点,但是我想知道是否有更简单的方法来做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以为该类覆盖ToString,只需将foo转换为string即可:

public class Foo
{
    public string A = string.Empty;
    public string B = string.Empty;
    public string C = string.Empty;
    public string D = string.Empty;

    public override string ToString()
    {
        return A + "," + B + "," + C + "," + D;
    }
}

Foo foo = new Foo
{
    A = "Tom",
    B = "Mark",
    C = "Paul",
    D = "John"
};

string s = foo.ToString();

答案 1 :(得分:0)

如果您不介意四处走走,可以将对象序列化为JSON,然后将其反序列化为字典,然后提取字典的值以获取简单的字符串列表。

string s = JsonConvert.SerializeObject(obj);
Dictionary<string, string> dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
List<string> propertyValues = dictionary.Values.toList();
string myOvercomplicatedString = String.Join(',', propertyValues);

我前面没有任何C#工具,因此这可能无法完美运行,但是您应该能够使其轻松工作。这不是一个很好的解决方案-我绝对希望定义一个直接将它们拉在一起或覆盖ToString的方法-但是如果您决定避免这种情况,那么遵循这些思路的解决方案将行得通。